Skip to main content

Manifest

Struct Manifest 

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

The root metadata structure for a bucket.

A manifest contains everything needed to access and verify a bucket:

  • Identity: Global UUID and human-readable name
  • Access control: Principal shares for decryption
  • Content pointers: Links to entry node, pin set, and crdt op log
  • Version chain: Previous link and height for history
  • Publication: Optional plaintext secret for public access

§Serialization

Manifests are serialized using DAG-CBOR and stored as content-addressed blobs. The manifest’s CID serves as the bucket’s current state identifier.

§Example

let manifest = Manifest::new(
    Uuid::new_v4(),
    "my-bucket".to_string(),
    owner_public_key,
    secret_share,
    entry_link,
    pins_link,
    0, // initial height
);

Implementations§

Source§

impl Manifest

Source

pub fn new( id: Uuid, name: String, owner: PublicKey, share: SecretShare, entry: Link, pins: Link, height: u64, ) -> Self

Create a new manifest with an initial owner.

§Arguments
  • id - Global unique identifier for the bucket
  • name - Human-readable display name
  • owner - Public key of the initial owner
  • share - Encrypted secret share for the owner
  • entry - Link to the root node
  • pins - Link to the pin set
  • height - Version chain height (usually 0 for new buckets)
Source

pub fn id(&self) -> &Uuid

Get the bucket’s unique identifier.

Source

pub fn name(&self) -> &str

Get the bucket’s display name.

Source

pub fn version(&self) -> &Version

Get the software version.

Source

pub fn entry(&self) -> &Link

Get the entry node link.

Source

pub fn pins(&self) -> &Link

Get the pins link.

Source

pub fn previous(&self) -> &Option<Link>

Get the previous manifest link.

Source

pub fn height(&self) -> u64

Get the version chain height.

Source

pub fn ops_log(&self) -> Option<&Link>

Get the operations log link.

Source

pub fn shares(&self) -> &BTreeMap<String, Share>

Get all shares.

Source

pub fn shares_mut(&mut self) -> &mut BTreeMap<String, Share>

Get mutable access to shares.

Source

pub fn get_share(&self, public_key: &PublicKey) -> Option<&Share>

Get a principal’s share by their public key.

Source

pub fn get_peer_ids(&self) -> Vec<PublicKey>

Get all peer public keys from shares.

Source

pub fn get_shares_by_role(&self, role: PrincipalRole) -> Vec<&Share>

Get all shares with a specific role.

Source

pub fn is_published(&self) -> bool

Check if the bucket is published.

Published buckets have their secret stored in plaintext, allowing anyone with the manifest to decrypt contents.

Source

pub fn public(&self) -> Option<&Secret>

Get the public secret if available.

Source

pub fn author(&self) -> Option<&PublicKey>

Get the author (signer’s public key) if the manifest is signed.

Source

pub fn signature(&self) -> Option<&Signature>

Get the signature if the manifest is signed.

Source

pub fn is_signed(&self) -> bool

Check if the manifest has been signed.

Source

pub fn set_entry(&mut self, entry: Link)

Set the entry node link.

Source

pub fn set_pins(&mut self, pins_link: Link)

Set the pins link.

Source

pub fn set_previous(&mut self, previous: Link)

Set the previous manifest link.

Source

pub fn set_height(&mut self, height: u64)

Set the version chain height.

Source

pub fn set_ops_log(&mut self, link: Link)

Set the operations log link.

Source

pub fn clear_ops_log(&mut self)

Clear the operations log link.

This should be called when creating a new version from an existing manifest, since each version has its own independent ops_log.

Source

pub fn add_share(&mut self, share: Share)

Add a share to the manifest.

Use Share::new_owner or Share::new_mirror to construct the share.

Source

pub fn publish(&mut self, secret: &Secret)

Publish the bucket by storing the secret in plaintext.

Warning: Once published, this version’s secret is exposed and anyone with the manifest can decrypt bucket contents.

Source

pub fn unpublish(&mut self)

Unpublish the bucket by clearing the public secret.

This removes public read access. Mirrors will no longer be able to decrypt bucket contents until republished.

Source

pub fn sign(&mut self, secret_key: &SecretKey) -> Result<(), ManifestError>

Sign this manifest with the given secret key.

Sets the author field to the public key and signature to the Ed25519 signature over the manifest’s signable bytes.

§Errors

Returns an error if the manifest cannot be serialized for signing.

Source

pub fn verify_signature(&self) -> Result<bool, ManifestError>

Verify the manifest’s signature.

Returns Ok(true) if the signature is valid, Ok(false) if the manifest is unsigned (no author or signature), and an error if verification fails.

§Errors

Returns an error if:

  • The manifest cannot be serialized for verification
  • The signature is invalid (tampered or wrong key)

Trait Implementations§

Source§

impl BlockEncoded<DagCborCodec> for Manifest

Source§

fn encode(&self) -> Result<Vec<u8>, CodecError>

Source§

fn decode(data: &[u8]) -> Result<Self, CodecError>

Source§

fn codec(&self) -> u64

Source§

impl Clone for Manifest

Source§

fn clone(&self) -> Manifest

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for Manifest

Source§

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

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

impl<'de> Deserialize<'de> for Manifest

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 Manifest

Source§

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

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 StructuralPartialEq for Manifest

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<T> CompatExt for T

Source§

fn compat(self) -> Compat<T>

Applies the Compat adapter by value. Read more
Source§

fn compat_ref(&self) -> Compat<&T>

Applies the Compat adapter by shared reference. Read more
Source§

fn compat_mut(&mut self) -> Compat<&mut T>

Applies the Compat adapter by mutable reference. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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>,

Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> RpcMessage for T
where T: Debug + Serialize + DeserializeOwned + Send + Sync + Unpin + 'static,