Skip to main content

DerivationBuilder

Struct DerivationBuilder 

Source
pub struct DerivationBuilder {
    pub arguments: Vec<String>,
    pub command: String,
    pub environment: BTreeMap<String, BString>,
    pub input_derivations: BTreeMap<StorePath, BTreeSet<OutputName>>,
    pub input_sources: BTreeSet<StorePath>,
    pub outputs: OutputsBuilder,
    pub system: String,
}
Expand description

Builder for Derivation and UnverifiedDerivation.

This helps to build either a Derivation or a UnverifiedDerivation from its component fields.

Since both Derivation and UnverifiedDerivation are immutable this builder is needed to construct them from scratch.

The fields are public so that they can be mutated without any getters and setters. The fields don’t know about output paths for a derivation, only output names and whether it’s a FOD.

Once the fields are populated:

§Validation

When building a Derivation or an UnverifiedDerivation the following things are checked:

  • StorePath of input derivations end in .drv.
  • system is not empty.
  • builder is not empty.
  • no environment variable name is empty.

In addition, if producing a Derivation, all of its invariants are checked as well.

Fields§

§arguments: Vec<String>

Command line arguments to builder

§command: String

Command to execute. This is usually a path to bash.

NOTE: This is called builder in cppnix and in Nix code.

§environment: BTreeMap<String, BString>

Environment variables to include in build environmennt.

§input_derivations: BTreeMap<StorePath, BTreeSet<OutputName>>

Map from drv path to output names used from this derivation.

§input_sources: BTreeSet<StorePath>

Plain store paths of additional inputs.

§outputs: OutputsBuilder

Builder for the outputs of this derivation.

§system: String

System used to build this derivation.

Implementations§

Source§

impl DerivationBuilder

Source

pub(super) fn serialize_with_replacements<'a, E, EK, EV, O, I, ID>( &self, writer: &mut impl Write, environment: E, outputs: O, input_derivations_sorted: I, ) -> Result<(), Error>
where E: IntoIterator<Item = (EK, EV)>, EK: AsRef<[u8]>, EV: AsRef<[u8]>, O: AtermWriteable, I: Iterator<Item = (ID, &'a BTreeSet<OutputName>)>, ID: AtermWriteable,

Like serialize, but allows replacing the environment, outputs and input_derivations for hash calculations.

This is used to render the ATerm representation of a Derivation “modulo fixed-output derivations”.

The passed environment, outputs and input_derivations MUST be sorted.

Source§

impl DerivationBuilder

Source

pub(super) fn hash_derivation_modulo_with_outputs<O, L, E, EK, EV>( &self, environment: E, outputs: &O, lookup: L, ) -> Result<Sha256, DerivationError>

Calculate HDM with provided environment variable and output replacements.

Source

fn hash_derivation_modulo<L>( &self, lookup: L, ) -> Result<Sha256, DerivationError>

Source

pub fn calculate_outputs<L>( &self, name: &str, lookup: L, ) -> Result<Outputs, DerivationError>

Calculate and return Outputs for this DerivationBuilder.

This will also ensure that the OutputsBuilder is valid, and that the provided name can be combined with the name of the output to produce a valid StorePath.

To calculate the outputs paths for input addressed outputs we need to lookup the hash derivation modulo of all input derivations, which is done using the provided HashDerivationModuloLookup.

Internally this calls store_path::build_ca_path or store_path::build_output_path, depending on output type, to actually make the StorePath.

Source

pub fn build<L>( self, name: &str, lookup: L, ) -> Result<Derivation, DerivationError>

Consume this builder and return the built Derivation if possible.

This will build the validated and full Derivation using the data from this DerivationBuilder, the provided name and provided HashDerivationModuloLookup.

Source

pub fn build_unverified( self, outputs: Outputs, ) -> Result<UnverifiedDerivation, DerivationError>

Consume this builder and return a UnverifiedDerivation with the provided outputs.

This will validate and update environment variables for outputs to their store paths.

Source

fn validate(&self) -> Result<(), DerivationError>

Validate the fields of this builder.

Trait Implementations§

Source§

impl Clone for DerivationBuilder

Source§

fn clone(&self) -> DerivationBuilder

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 Debug for DerivationBuilder

Source§

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

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

impl Default for DerivationBuilder

Source§

fn default() -> DerivationBuilder

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

impl<'de> Deserialize<'de> for DerivationBuilder

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 PartialEq for DerivationBuilder

Source§

fn eq(&self, other: &DerivationBuilder) -> 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 Eq for DerivationBuilder

Source§

impl StructuralPartialEq for DerivationBuilder

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> 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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
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 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> Same for T

Source§

type Output = T

Should always be Self
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.
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
Source§

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