Struct TableBuilder

Source
pub struct TableBuilder { /* private fields */ }
Expand description

A builder for Table values based on various line definitions.

Implementations§

Source§

impl TableBuilder

Source

pub fn new() -> TableBuilder

Creates a new builder with an empty table.

Examples found in repository?
examples/benchmark.rs (line 11)
6fn main() {
7    let asia = std::fs::read_to_string("examples/asia").unwrap();
8
9    for _ in 0..100 {
10        let parser = LineParser::default();
11        let mut builder = TableBuilder::new();
12        for line in asia.lines() {
13            match parser.parse_str(line).unwrap() {
14                Line::Zone(zone) => builder.add_zone_line(zone).unwrap(),
15                Line::Continuation(cont) => builder.add_continuation_line(cont).unwrap(),
16                Line::Rule(rule) => builder.add_rule_line(rule).unwrap(),
17                Line::Link(link) => builder.add_link_line(link).unwrap(),
18                Line::Space => {}
19            }
20        }
21        let _table = builder.build();
22    }
23}
Source

pub fn add_zone_line<'line>( &mut self, zone_line: Zone<'line>, ) -> Result<(), Error<'line>>

Adds a new line describing a zone definition.

Returns an error if there’s already a zone with the same name, or the zone refers to a ruleset that hasn’t been defined yet.

Examples found in repository?
examples/benchmark.rs (line 14)
6fn main() {
7    let asia = std::fs::read_to_string("examples/asia").unwrap();
8
9    for _ in 0..100 {
10        let parser = LineParser::default();
11        let mut builder = TableBuilder::new();
12        for line in asia.lines() {
13            match parser.parse_str(line).unwrap() {
14                Line::Zone(zone) => builder.add_zone_line(zone).unwrap(),
15                Line::Continuation(cont) => builder.add_continuation_line(cont).unwrap(),
16                Line::Rule(rule) => builder.add_rule_line(rule).unwrap(),
17                Line::Link(link) => builder.add_link_line(link).unwrap(),
18                Line::Space => {}
19            }
20        }
21        let _table = builder.build();
22    }
23}
Source

pub fn add_continuation_line( &mut self, continuation_line: ZoneInfo<'_>, ) -> Result<(), Error<'_>>

Adds a new line describing the continuation of a zone definition.

Returns an error if the builder wasn’t expecting a continuation line (meaning, the previous line wasn’t a zone line)

Examples found in repository?
examples/benchmark.rs (line 15)
6fn main() {
7    let asia = std::fs::read_to_string("examples/asia").unwrap();
8
9    for _ in 0..100 {
10        let parser = LineParser::default();
11        let mut builder = TableBuilder::new();
12        for line in asia.lines() {
13            match parser.parse_str(line).unwrap() {
14                Line::Zone(zone) => builder.add_zone_line(zone).unwrap(),
15                Line::Continuation(cont) => builder.add_continuation_line(cont).unwrap(),
16                Line::Rule(rule) => builder.add_rule_line(rule).unwrap(),
17                Line::Link(link) => builder.add_link_line(link).unwrap(),
18                Line::Space => {}
19            }
20        }
21        let _table = builder.build();
22    }
23}
Source

pub fn add_rule_line(&mut self, rule_line: Rule<'_>) -> Result<(), Error<'_>>

Adds a new line describing one entry in a ruleset, creating that set if it didn’t exist already.

Examples found in repository?
examples/benchmark.rs (line 16)
6fn main() {
7    let asia = std::fs::read_to_string("examples/asia").unwrap();
8
9    for _ in 0..100 {
10        let parser = LineParser::default();
11        let mut builder = TableBuilder::new();
12        for line in asia.lines() {
13            match parser.parse_str(line).unwrap() {
14                Line::Zone(zone) => builder.add_zone_line(zone).unwrap(),
15                Line::Continuation(cont) => builder.add_continuation_line(cont).unwrap(),
16                Line::Rule(rule) => builder.add_rule_line(rule).unwrap(),
17                Line::Link(link) => builder.add_link_line(link).unwrap(),
18                Line::Space => {}
19            }
20        }
21        let _table = builder.build();
22    }
23}

Adds a new line linking one zone to another.

Returns an error if there was already a link with that name.

Examples found in repository?
examples/benchmark.rs (line 17)
6fn main() {
7    let asia = std::fs::read_to_string("examples/asia").unwrap();
8
9    for _ in 0..100 {
10        let parser = LineParser::default();
11        let mut builder = TableBuilder::new();
12        for line in asia.lines() {
13            match parser.parse_str(line).unwrap() {
14                Line::Zone(zone) => builder.add_zone_line(zone).unwrap(),
15                Line::Continuation(cont) => builder.add_continuation_line(cont).unwrap(),
16                Line::Rule(rule) => builder.add_rule_line(rule).unwrap(),
17                Line::Link(link) => builder.add_link_line(link).unwrap(),
18                Line::Space => {}
19            }
20        }
21        let _table = builder.build();
22    }
23}
Source

pub fn build(self) -> Table

Returns the table after it’s finished being built.

Examples found in repository?
examples/benchmark.rs (line 21)
6fn main() {
7    let asia = std::fs::read_to_string("examples/asia").unwrap();
8
9    for _ in 0..100 {
10        let parser = LineParser::default();
11        let mut builder = TableBuilder::new();
12        for line in asia.lines() {
13            match parser.parse_str(line).unwrap() {
14                Line::Zone(zone) => builder.add_zone_line(zone).unwrap(),
15                Line::Continuation(cont) => builder.add_continuation_line(cont).unwrap(),
16                Line::Rule(rule) => builder.add_rule_line(rule).unwrap(),
17                Line::Link(link) => builder.add_link_line(link).unwrap(),
18                Line::Space => {}
19            }
20        }
21        let _table = builder.build();
22    }
23}

Trait Implementations§

Source§

impl Debug for TableBuilder

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Default for TableBuilder

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl PartialEq for TableBuilder

Source§

fn eq(&self, other: &TableBuilder) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for TableBuilder

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where 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, U> Into<U> for T
where 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 T
where U: Into<T>,

Source§

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 T
where U: TryFrom<T>,

Source§

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.