pub(super) struct HtmlWithLimit {
    buf: String,
    len: usize,
    limit: usize,
    queued_tags: Vec<&'static str>,
    unclosed_tags: Vec<&'static str>,
}
Expand description

A buffer that allows generating HTML with a length limit.

This buffer ensures that:

  • all tags are closed,
  • tags are closed in the reverse order of when they were opened (i.e., the correct HTML order),
  • no tags are left empty (e.g., <em></em>) due to the length limit being reached,
  • all text is escaped.

Fields§

§buf: String§len: usize§limit: usize§queued_tags: Vec<&'static str>

A list of tags that have been requested to be opened via Self::open_tag() but have not actually been pushed to buf yet. This ensures that tags are not left empty (e.g., <em></em>) due to the length limit being reached.

§unclosed_tags: Vec<&'static str>

A list of all tags that have been opened but not yet closed.

Implementations§

source§

impl HtmlWithLimit

source

pub(super) fn new(length_limit: usize) -> Self

Create a new buffer, with a limit of length_limit.

source

pub(super) fn finish(self) -> String

Finish using the buffer and get the written output. This function will close all unclosed tags for you.

source

pub(super) fn push(&mut self, text: &str) -> ControlFlow<(), ()>

Write some plain text to the buffer, escaping as needed.

This function skips writing the text if the length limit was reached and returns ControlFlow::Break.

source

pub(super) fn open_tag(&mut self, tag_name: &'static str)

Open an HTML tag.

Note: HTML attributes have not yet been implemented. This function will panic if called with a non-alphabetic tag_name.

source

pub(super) fn close_tag(&mut self)

Close the most recently opened HTML tag.

source

fn flush_queue(&mut self)

Write all queued tags and add them to the unclosed_tags list.

source

fn close_all_tags(&mut self)

Close all unclosed tags.

Trait Implementations§

source§

impl Debug for HtmlWithLimit

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 88 bytes