peanuts/src/writer.rs

82 lines
2.3 KiB
Rust
Raw Normal View History

use std::collections::HashSet;
use futures::Sink;
use tokio::io::AsyncWrite;
2024-03-04 16:14:28 +00:00
use crate::{
element::{Element, Name, NamespaceDeclaration},
2024-03-04 16:14:28 +00:00
error::Error,
xml::{self, composers::Composer, parsers_complete::Parser, ETag},
2024-03-04 16:14:28 +00:00
};
2024-11-01 18:36:11 +00:00
// pub struct Writer<W, C = Composer> {
2024-03-04 16:14:28 +00:00
pub struct Writer<W> {
inner: W,
2024-03-04 16:14:28 +00:00
depth: Vec<Name>,
namespaces: Vec<HashSet<NamespaceDeclaration>>,
2024-03-04 16:14:28 +00:00
}
impl<W: AsyncWrite + Unpin> Writer<W> {
pub async fn write(&mut self, element: Element) -> Result<(), Error> {
todo!()
}
pub async fn write_start(&mut self, element: Element) -> Result<(), Error> {
todo!()
}
pub async fn write_end(&mut self) -> Result<(), Error> {
todo!()
// let e_tag;
// if let Some(name) = self.depth.pop() {
// if let Some(prefix) = name.namespace.prefix {
// e_tag = xml::ETag {
// name: xml::QName::PrefixedName(xml::PrefixedName {
// prefix: xml::Prefix::parse_full(&prefix)?,
// local_part: xml::LocalPart::parse_full(&name.name)?,
// }),
// };
// e_tag.write(&mut self.inner).await?;
// Ok(())
// } else {
// e_tag = xml::ETag {
// name: xml::QName::UnprefixedName(xml::UnprefixedName::parse_full(&name.name)?),
// };
// e_tag.write(&mut self.inner).await?;
// Ok(())
// }
// } else {
// return Err(Error::NotInElement("".to_string()));
// }
}
2024-03-04 16:14:28 +00:00
}
impl<W: AsyncWrite, E: Into<Element>> Sink<E> for Writer<W> {
type Error = Error;
fn poll_ready(
self: std::pin::Pin<&mut Self>,
cx: &mut std::task::Context<'_>,
) -> std::task::Poll<Result<(), Self::Error>> {
todo!()
}
fn start_send(self: std::pin::Pin<&mut Self>, item: E) -> Result<(), Self::Error> {
todo!()
}
fn poll_flush(
self: std::pin::Pin<&mut Self>,
cx: &mut std::task::Context<'_>,
) -> std::task::Poll<Result<(), Self::Error>> {
todo!()
}
fn poll_close(
self: std::pin::Pin<&mut Self>,
cx: &mut std::task::Context<'_>,
) -> std::task::Poll<Result<(), Self::Error>> {
todo!()
}
}