Skip to main content

Program

Struct Program 

Source
pub struct Program<O> {
    pub steps: Vec<Step<O>>,
}
Expand description

A recipe for building a Part: an ordered list of steps, each referring to what earlier ones built only by name. Those names come from step ids and sketch element ids, never from the internal ids a build happens to assign (see geop_ops), so a program means the same thing every time it is run — including after a round trip through JSON.

Fields§

§steps: Vec<Step<O>>

Implementations§

Source§

impl<O: Operations> Program<O>

Source

pub fn new() -> Self

Source

pub fn push(&mut self, id: impl Into<String>, operation: impl Into<O>)

Appends the step id: operation with its arguments.

Source

pub fn index_of(&self, id: &str) -> GeopResult<usize>

The position of step id.

Source

pub fn fresh_id(&self, operation: &O) -> String

An id no step has yet, for a new step running operation: its label, lowercased, and the lowest number that makes it unique — sketch1, extrude2.

Source

pub fn validate(&self) -> GeopResult<()>

Checks that every step id is a valid operation id and unique: every name a step creates is built from its id.

Source

pub fn build<S: Scalar>(&self) -> GeopResult<Part<S>>

Runs every step in order, starting from an empty part, and returns the part the whole program builds — or the first error any step raises, at which point the steps after it never run. A program always starts from nothing: its names are only guaranteed to be unique, and to mean the same thing on every run, when every entity was created by one of its own steps.

After each step, every entity of the part must have a name — an operation that leaves one unnamed has broken the one guarantee a program relies on.

Source

pub fn to_json(&self) -> GeopResult<String>

The program as pretty-printed JSON: one step per object, every sketch entity keyed by its id, so edits show up as small line diffs.

Source

pub fn from_json(json: &str) -> GeopResult<Self>

Trait Implementations§

Source§

impl<O: Clone> Clone for Program<O>

Source§

fn clone(&self) -> Program<O>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<O: Debug> Debug for Program<O>

Source§

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

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

impl<O> Default for Program<O>

Source§

fn default() -> Self

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

impl<'de, O> Deserialize<'de> for Program<O>
where O: Deserialize<'de>,

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl<O: PartialEq> PartialEq for Program<O>

Source§

fn eq(&self, other: &Program<O>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · 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<O> Serialize for Program<O>
where O: Serialize,

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl<O: PartialEq> StructuralPartialEq for Program<O>

Auto Trait Implementations§

§

impl<O> Freeze for Program<O>

§

impl<O> RefUnwindSafe for Program<O>
where O: RefUnwindSafe,

§

impl<O> Send for Program<O>
where O: Send,

§

impl<O> Sync for Program<O>
where O: Sync,

§

impl<O> Unpin for Program<O>
where O: Unpin,

§

impl<O> UnsafeUnpin for Program<O>

§

impl<O> UnwindSafe for Program<O>
where O: UnwindSafe,

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.