pub struct RleBuilder<Name = RleBuilderNoName, Created = RleBuilderNoCreated, Comment = RleBuilderNoComment, Rule = RleBuilderNoRule>where
Name: RleBuilderName,
Created: RleBuilderCreated,
Comment: RleBuilderComment,
Rule: RleBuilderRule,{ /* private fields */ }
Expand description
A builder of Rle
.
§Examples
Creates a builder via collect()
with live cell positions, set a name via name()
, then builds Rle
via build()
:
use life_backend::format::RleBuilder;
use life_backend::Position;
let pattern = [Position(1, 0), Position(2, 0), Position(0, 1), Position(1, 1), Position(1, 2)];
let target = pattern.iter().collect::<RleBuilder>().name("R-pentomino").build()?;
let expected = "\
#N R-pentomino\n\
x = 3, y = 3, rule = B3/S23\n\
b2o$2o$bo!\n\
";
assert_eq!(format!("{target}"), expected);
Creates an empty builder via new()
, set a name via name()
, injects live cell positions via extend()
, then builds Rle
via build()
:
use life_backend::format::RleBuilder;
use life_backend::Position;
let pattern = [Position(1, 0), Position(2, 0), Position(0, 1), Position(1, 1), Position(1, 2)];
let mut builder = RleBuilder::new().name("R-pentomino");
builder.extend(pattern.iter());
let target = builder.build()?;
let expected = "\
#N R-pentomino\n\
x = 3, y = 3, rule = B3/S23\n\
b2o$2o$bo!\n\
";
assert_eq!(format!("{target}"), expected);
Implementations§
Source§impl RleBuilder<RleBuilderNoName, RleBuilderNoCreated, RleBuilderNoComment, RleBuilderNoRule>
impl RleBuilder<RleBuilderNoName, RleBuilderNoCreated, RleBuilderNoComment, RleBuilderNoRule>
Source§impl<Name, Created, Comment, RuleSpec> RleBuilder<Name, Created, Comment, RuleSpec>where
Name: RleBuilderName,
Created: RleBuilderCreated,
Comment: RleBuilderComment,
RuleSpec: RleBuilderRule,
impl<Name, Created, Comment, RuleSpec> RleBuilder<Name, Created, Comment, RuleSpec>where
Name: RleBuilderName,
Created: RleBuilderCreated,
Comment: RleBuilderComment,
RuleSpec: RleBuilderRule,
Source§impl<Created, Comment, Rule> RleBuilder<RleBuilderNoName, Created, Comment, Rule>where
Created: RleBuilderCreated,
Comment: RleBuilderComment,
Rule: RleBuilderRule,
impl<Created, Comment, Rule> RleBuilder<RleBuilderNoName, Created, Comment, Rule>where
Created: RleBuilderCreated,
Comment: RleBuilderComment,
Rule: RleBuilderRule,
Sourcepub fn name(
self,
str: &str,
) -> RleBuilder<RleBuilderWithName, Created, Comment, Rule>
pub fn name( self, str: &str, ) -> RleBuilder<RleBuilderWithName, Created, Comment, Rule>
Set the name.
§Examples
use life_backend::format::RleBuilder;
use life_backend::Position;
let pattern = [Position(1, 0), Position(0, 1)];
let target = pattern
.iter()
.collect::<RleBuilder>()
.name("foo")
.build()?;
assert_eq!(target.comments().len(), 1);
assert_eq!(target.comments()[0], "#N foo".to_string());
§Errors
Code that calls name()
twice or more will fail at compile time. For example:
use life_backend::format::RleBuilder;
use life_backend::Position;
let pattern = [Position(1, 0), Position(0, 1)];
let target = pattern
.iter()
.collect::<RleBuilder>()
.name("foo")
.name("bar") // Compile error
.build()?;
build()
returns an error if the string passed by name()
includes multiple lines. For example:
use life_backend::format::RleBuilder;
use life_backend::Position;
let pattern = [Position(1, 0), Position(0, 1)];
let target = pattern
.iter()
.collect::<RleBuilder>()
.name("foo\nbar")
.build()?; // Should fail
Source§impl<Name, Comment, Rule> RleBuilder<Name, RleBuilderNoCreated, Comment, Rule>where
Name: RleBuilderName,
Comment: RleBuilderComment,
Rule: RleBuilderRule,
impl<Name, Comment, Rule> RleBuilder<Name, RleBuilderNoCreated, Comment, Rule>where
Name: RleBuilderName,
Comment: RleBuilderComment,
Rule: RleBuilderRule,
Sourcepub fn created(
self,
str: &str,
) -> RleBuilder<Name, RleBuilderWithCreated, Comment, Rule>
pub fn created( self, str: &str, ) -> RleBuilder<Name, RleBuilderWithCreated, Comment, Rule>
Set the information when and by whom the pattern was created.
If the argument includes newlines, the instance of Rle
built by build()
includes multiple comment lines.
§Examples
use life_backend::format::RleBuilder;
use life_backend::Position;
let pattern = [Position(1, 0), Position(0, 1)];
let target = pattern
.iter()
.collect::<RleBuilder>()
.created("foo")
.build()?;
assert_eq!(target.comments().len(), 1);
assert_eq!(target.comments()[0], "#O foo".to_string());
§Errors
Code that calls created()
twice or more will fail at compile time. For example:
use life_backend::format::RleBuilder;
use life_backend::Position;
let pattern = [Position(1, 0), Position(0, 1)];
let target = pattern
.iter()
.collect::<RleBuilder>()
.created("foo")
.created("bar") // Compile error
.build()?;
Source§impl<Name, Created, Rule> RleBuilder<Name, Created, RleBuilderNoComment, Rule>where
Name: RleBuilderName,
Created: RleBuilderCreated,
Rule: RleBuilderRule,
impl<Name, Created, Rule> RleBuilder<Name, Created, RleBuilderNoComment, Rule>where
Name: RleBuilderName,
Created: RleBuilderCreated,
Rule: RleBuilderRule,
Sourcepub fn comment(
self,
str: &str,
) -> RleBuilder<Name, Created, RleBuilderWithComment, Rule>
pub fn comment( self, str: &str, ) -> RleBuilder<Name, Created, RleBuilderWithComment, Rule>
Set the comment.
If the argument includes newlines, the instance of Rle
built by build()
includes multiple comment lines.
§Examples
use life_backend::format::RleBuilder;
use life_backend::Position;
let pattern = [Position(1, 0), Position(0, 1)];
let target = pattern
.iter()
.collect::<RleBuilder>()
.comment("comment0\ncomment1")
.build()?;
assert_eq!(target.comments().len(), 2);
assert_eq!(target.comments()[0], "#C comment0".to_string());
assert_eq!(target.comments()[1], "#C comment1".to_string());
§Errors
Code that calls comment()
twice or more will fail at compile time. For example:
use life_backend::format::RleBuilder;
use life_backend::Position;
let pattern = [Position(1, 0), Position(0, 1)];
let target = pattern
.iter()
.collect::<RleBuilder>()
.comment("comment0")
.comment("comment1")
.build()?; // Compile error
Source§impl<Name, Created, Comment> RleBuilder<Name, Created, Comment, RleBuilderNoRule>where
Name: RleBuilderName,
Created: RleBuilderCreated,
Comment: RleBuilderComment,
impl<Name, Created, Comment> RleBuilder<Name, Created, Comment, RleBuilderNoRule>where
Name: RleBuilderName,
Created: RleBuilderCreated,
Comment: RleBuilderComment,
Sourcepub fn rule(
self,
rule: Rule,
) -> RleBuilder<Name, Created, Comment, RleBuilderWithRule>
pub fn rule( self, rule: Rule, ) -> RleBuilder<Name, Created, Comment, RleBuilderWithRule>
Set the rule.
§Examples
use life_backend::format::RleBuilder;
use life_backend::{Position, Rule};
let pattern = [Position(1, 0), Position(0, 1)];
let target = pattern
.iter()
.collect::<RleBuilder>()
.rule(Rule::conways_life())
.build()?;
assert_eq!(*target.rule(), Rule::conways_life());
§Errors
Code that calls rule()
twice or more will fail at compile time. For example:
use life_backend::format::RleBuilder;
use life_backend::{Position, Rule};
let pattern = [Position(1, 0), Position(0, 1)];
let target = pattern
.iter()
.collect::<RleBuilder>()
.rule(Rule::conways_life())
.rule(Rule::conways_life()) // Compile error
.build()?;
Trait Implementations§
Source§impl<Name, Created, Comment, Rule> Clone for RleBuilder<Name, Created, Comment, Rule>
impl<Name, Created, Comment, Rule> Clone for RleBuilder<Name, Created, Comment, Rule>
Source§fn clone(&self) -> RleBuilder<Name, Created, Comment, Rule>
fn clone(&self) -> RleBuilder<Name, Created, Comment, Rule>
1.0.0 · Source§const fn clone_from(&mut self, source: &Self)
const fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<Name, Created, Comment, Rule> Debug for RleBuilder<Name, Created, Comment, Rule>
impl<Name, Created, Comment, Rule> Debug for RleBuilder<Name, Created, Comment, Rule>
Source§impl Default for RleBuilder<RleBuilderNoName, RleBuilderNoCreated, RleBuilderNoComment, RleBuilderNoRule>
impl Default for RleBuilder<RleBuilderNoName, RleBuilderNoCreated, RleBuilderNoComment, RleBuilderNoRule>
Source§impl<'a, Name, Created, Comment, RuleSpec> Extend<&'a Position<usize>> for RleBuilder<Name, Created, Comment, RuleSpec>where
Name: RleBuilderName,
Created: RleBuilderCreated,
Comment: RleBuilderComment,
RuleSpec: RleBuilderRule,
impl<'a, Name, Created, Comment, RuleSpec> Extend<&'a Position<usize>> for RleBuilder<Name, Created, Comment, RuleSpec>where
Name: RleBuilderName,
Created: RleBuilderCreated,
Comment: RleBuilderComment,
RuleSpec: RleBuilderRule,
Source§fn extend<T>(&mut self, iter: T)
fn extend<T>(&mut self, iter: T)
Extends the builder with the contents of the specified non-owning iterator over the series of &Position<usize>
.
Each item in the series represents an immutable reference of a live cell position.
§Examples
use life_backend::format::RleBuilder;
use life_backend::Position;
let pattern = [Position(1, 0), Position(0, 1)];
let iter = pattern.iter();
let mut builder = RleBuilder::new();
builder.extend(iter);
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one
)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one
)Source§impl<Name, Created, Comment, RuleSpec> Extend<Position<usize>> for RleBuilder<Name, Created, Comment, RuleSpec>where
Name: RleBuilderName,
Created: RleBuilderCreated,
Comment: RleBuilderComment,
RuleSpec: RleBuilderRule,
impl<Name, Created, Comment, RuleSpec> Extend<Position<usize>> for RleBuilder<Name, Created, Comment, RuleSpec>where
Name: RleBuilderName,
Created: RleBuilderCreated,
Comment: RleBuilderComment,
RuleSpec: RleBuilderRule,
Source§fn extend<T>(&mut self, iter: T)
fn extend<T>(&mut self, iter: T)
Extends the builder with the contents of the specified owning iterator over the series of Position<usize>
.
Each item in the series represents a moved live cell position.
§Examples
use life_backend::format::RleBuilder;
use life_backend::Position;
let pattern = [Position(1, 0), Position(0, 1)];
let iter = pattern.into_iter();
let mut builder = RleBuilder::new();
builder.extend(iter);
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one
)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one
)Source§impl<'a> FromIterator<&'a Position<usize>> for RleBuilder<RleBuilderNoName, RleBuilderNoCreated, RleBuilderNoComment, RleBuilderNoRule>
impl<'a> FromIterator<&'a Position<usize>> for RleBuilder<RleBuilderNoName, RleBuilderNoCreated, RleBuilderNoComment, RleBuilderNoRule>
Source§fn from_iter<T>(iter: T) -> Self
fn from_iter<T>(iter: T) -> Self
Creates a value from a non-owning iterator over a series of &Position<usize>
.
Each item in the series represents an immutable reference of a live cell position.
§Examples
use life_backend::format::RleBuilder;
use life_backend::Position;
let pattern = [Position(1, 0), Position(0, 1)];
let iter = pattern.iter();
let builder: RleBuilder = iter.collect();
Source§impl FromIterator<Position<usize>> for RleBuilder<RleBuilderNoName, RleBuilderNoCreated, RleBuilderNoComment, RleBuilderNoRule>
impl FromIterator<Position<usize>> for RleBuilder<RleBuilderNoName, RleBuilderNoCreated, RleBuilderNoComment, RleBuilderNoRule>
Source§fn from_iter<T>(iter: T) -> Self
fn from_iter<T>(iter: T) -> Self
Creates a value from an owning iterator over a series of Position<usize>
.
Each item in the series represents a moved live cell position.
§Examples
use life_backend::format::RleBuilder;
use life_backend::Position;
let pattern = [Position(1, 0), Position(0, 1)];
let iter = pattern.into_iter();
let builder: RleBuilder = iter.collect();