diff --git a/src/writer.rs b/src/writer.rs index 25e19fb..5f9f3fd 100644 --- a/src/writer.rs +++ b/src/writer.rs @@ -1,4 +1,4 @@ -use std::{collections::HashSet, str::FromStr}; +use std::{collections::HashSet, pin::pin, str::FromStr}; use async_recursion::async_recursion; use futures::Sink; @@ -6,7 +6,7 @@ use tokio::io::{AsyncWrite, AsyncWriteExt}; use crate::{ declaration::{Declaration, VersionInfo}, - element::{escape_str, Content, Element, IntoElement, Name, NamespaceDeclaration}, + element::{escape_str, Content, Element, IntoContent, IntoElement, Name, NamespaceDeclaration}, error::Error, xml::{self, composers::Composer, parsers_complete::Parser, ETag, XMLDecl}, Result, XMLNS_NS, XML_NS, @@ -79,6 +79,11 @@ impl Writer { Ok(()) } + pub async fn write(&mut self, into_content: &impl IntoContent) -> Result<()> { + let content = into_content.into_content(); + Ok(self.write_content(&content).await?) + } + #[async_recursion] pub async fn write_element(&mut self, element: &Element) -> Result<()> { if element.content.is_empty() { @@ -357,35 +362,6 @@ impl Writer { } } -impl> Sink for Writer { - type Error = Error; - - fn poll_ready( - self: std::pin::Pin<&mut Self>, - cx: &mut std::task::Context<'_>, - ) -> std::task::Poll> { - todo!() - } - - fn start_send(self: std::pin::Pin<&mut Self>, item: E) -> Result<()> { - todo!() - } - - fn poll_flush( - self: std::pin::Pin<&mut Self>, - cx: &mut std::task::Context<'_>, - ) -> std::task::Poll> { - todo!() - } - - fn poll_close( - self: std::pin::Pin<&mut Self>, - cx: &mut std::task::Context<'_>, - ) -> std::task::Poll> { - todo!() - } -} - #[cfg(test)] mod test { use crate::{