use std::{borrow::Cow, fmt::Display};use bstr::BString;use crate::parse::Comment;impl Comment<'_> { /// Turn this instance into a fully owned one with `'static` lifetime. #[must_use] pub fn to_owned(&self) -> Comment<'static> { Comment { tag: self.tag, text: Cow::Owned(self.text.as_ref().into()), } } /// Serialize this type into a `BString` for convenience. /// /// Note that `to_string()` can also be used, but might not be lossless. #[must_use] pub fn to_bstring(&self) -> BString { let mut buf = Vec::new(); self.write_to(&mut buf).expect("io error impossible"); buf.into() } /// Stream ourselves to the given `out`, in order to reproduce this comment losslessly. pub fn write_to(&self, mut out: impl std::io::Write) -> std::io::Result<()> { out.write_all(&[self.tag])?; out.write_all(self.text.as_ref()) }}impl Display for Comment<'_> { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { Display::fmt(&self.to_bstring(), f) }}impl From<Comment<'_>> for BString { fn from(c: Comment<'_>) -> Self { c.into() }}impl From<&Comment<'_>> for BString { fn from(c: &Comment<'_>) -> Self { c.to_bstring() }}
use std::{borrow::Cow, fmt::Display};
use bstr::BString;
use crate::parse::Comment;
impl Comment<'_> {
/// Turn this instance into a fully owned one with `'static` lifetime.
#[must_use]
pub fn to_owned(&self) -> Comment<'static> {
Comment {
tag: self.tag,
text: Cow::Owned(self.text.as_ref().into()),
}
}
/// Serialize this type into a `BString` for convenience.
///
/// Note that `to_string()` can also be used, but might not be lossless.
#[must_use]
pub fn to_bstring(&self) -> BString {
let mut buf = Vec::new();
self.write_to(&mut buf).expect("io error impossible");
buf.into()
}
/// Stream ourselves to the given `out`, in order to reproduce this comment losslessly.
pub fn write_to(&self, mut out: impl std::io::Write) -> std::io::Result<()> {
out.write_all(&[self.tag])?;
out.write_all(self.text.as_ref())
}
}
impl Display for Comment<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
Display::fmt(&self.to_bstring(), f)
}
}
impl From<Comment<'_>> for BString {
fn from(c: Comment<'_>) -> Self {
c.into()
}
}
impl From<&Comment<'_>> for BString {
fn from(c: &Comment<'_>) -> Self {
c.to_bstring()
}
}