impl<W: AsyncWrite + Unpin> Writer<W> { /// Writes the given event to the underlying writer. Async version of [`Writer::write_event`]. pubasyncfn write_event_async<'a, E: Into<Event<'a>>>(&mutself, event: E) -> Result<()> { letmut next_should_line_break = true; let result = match event.into() {
Event::Start(e) => { let result = self.write_wrapped_async(b"<", &e, b">").await; iflet Some(i) = self.indent.as_mut() {
i.grow();
}
result
}
Event::End(e) => { iflet Some(i) = self.indent.as_mut() {
i.shrink();
} self.write_wrapped_async(b"</", &e, b">").await
}
Event::Empty(e) => self.write_wrapped_async(b"<", &e, b"/>").await,
Event::Text(e) => {
next_should_line_break = false; self.write_async(&e).await
}
Event::Comment(e) => self.write_wrapped_async(b"<!--", &e, b"-->").await,
Event::CData(e) => {
next_should_line_break = false; self.write_async(b"<![CDATA[").await?; self.write_async(&e).await?; self.write_async(b"]]>").await
}
Event::Decl(e) => self.write_wrapped_async(b"<?", &e, b"?>").await,
Event::PI(e) => self.write_wrapped_async(b"<?", &e, b"?>").await,
Event::DocType(e) => self.write_wrapped_async(b"<!DOCTYPE ", &e, b">").await,
Event::Eof => Ok(()),
}; iflet Some(i) = self.indent.as_mut() {
i.should_line_break = next_should_line_break;
}
result
}
/// Manually write a newline and indentation at the proper level. Async version of /// [`Writer::write_indent`]. /// /// This method will do nothing if `Writer` was not constructed with [`Writer::new_with_indent`]. pubasyncfn write_indent_async(&mutself) -> Result<()> { iflet Some(ref i) = self.indent { self.writer.write_all(b"\n").await?; self.writer.write_all(i.current()).await?;
}
Ok(())
}
let start = Event::Start(BytesStart::new("tag")); let text = Event::Text(BytesText::new("inner text")); let end = Event::End(BytesEnd::new("tag")); for i in [start, text, end] {
writer.write_event_async(i).await.expect("write tag failed");
}
let tag = BytesStart::new("self-closed")
.with_attributes(vec![("attr1", "value1"), ("attr2", "value2")].into_iter());
writer
.write_event_async(Event::Empty(tag))
.await
.expect("write tag failed");
let start = BytesStart::new("paired")
.with_attributes(vec![("attr1", "value1"), ("attr2", "value2")].into_iter()); let end = start.to_end();
writer
.write_event_async(Event::Start(start.clone()))
.await
.expect("write start tag failed");
writer
.write_event_async(Event::End(end))
.await
.expect("write end tag failed");
let start = BytesStart::new("paired")
.with_attributes(vec![("attr1", "value1"), ("attr2", "value2")].into_iter()); let end = start.to_end(); let inner = BytesStart::new("inner");
writer
.write_event_async(Event::Start(start.clone()))
.await
.expect("write start tag failed");
writer
.write_event_async(Event::Empty(inner))
.await
.expect("write inner tag failed");
writer
.write_event_async(Event::End(end))
.await
.expect("write end tag failed");
let start = BytesStart::new("paired")
.with_attributes(vec![("attr1", "value1"), ("attr2", "value2")].into_iter()); let end = start.to_end(); let text = BytesText::new("text");
writer
.write_event_async(Event::Start(start.clone()))
.await
.expect("write start tag failed");
writer
.write_event_async(Event::Text(text))
.await
.expect("write text failed");
writer
.write_event_async(Event::End(end))
.await
.expect("write end tag failed");
let start = BytesStart::new("paired")
.with_attributes(vec![("attr1", "value1"), ("attr2", "value2")].into_iter()); let end = start.to_end(); let text = BytesText::new("text"); let inner = BytesStart::new("inner");
writer
.write_event_async(Event::Start(start.clone()))
.await
.expect("write start tag failed");
writer
.write_event_async(Event::Text(text))
.await
.expect("write text failed");
writer
.write_event_async(Event::Empty(inner))
.await
.expect("write inner tag failed");
writer
.write_event_async(Event::End(end))
.await
.expect("write end tag failed");
let start = BytesStart::new("paired")
.with_attributes(vec![("attr1", "value1"), ("attr2", "value2")].into_iter()); let end = start.to_end(); let inner = BytesStart::new("inner");
writer
.write_event_async(Event::Start(start.clone()))
.await
.expect("write start 1 tag failed");
writer
.write_event_async(Event::Start(start.clone()))
.await
.expect("write start 2 tag failed");
writer
.write_event_async(Event::Empty(inner))
.await
.expect("write inner tag failed");
writer
.write_event_async(Event::End(end.clone()))
.await
.expect("write end tag 2 failed");
writer
.write_event_async(Event::End(end))
.await
.expect("write end tag 1 failed");
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.