Skip to main content

PortableExtensions

Struct PortableExtensions 

Source
pub struct PortableExtensions(/* private fields */);
Expand description

A bag of preserved (key, value) pairs, in the document’s own vocabulary.

Used for both channels (see the module docs): the nested extensions object this build writes, and the flattened catch-all it only reads. A newtype over a JSON value map, rather than a bare Map, so the one inserter is private and every write goes through PortableTimeDocument::insert_extension. A JSON map (not a YAML map) because this document is JSON and a YAML value JSON cannot carry is withheld and diagnosed rather than silently reshaped. The map is sorted (serde_json’s preserve_order feature is off), so key order is normalised while the values — the thing a round trip preserves — are kept exactly.

§No public route to a key that could shadow a projected field

Deserialize is derived (a document has to be readable), so a caller can obtain a bag naming any key. What a caller cannot do is hand one to a flattened channel: those fields are private everywhere they exist, and the only public way in is the checked nesting shown below, where the key lands inside an object of its own and can therefore never duplicate — or be read in place of — the value beside it. That is a compile-time property, so it is asserted as one:

ⓘ
use tix::time_tracking::portable::{PortableExtensions, PortableTimeDocument};

let mut document: PortableTimeDocument = unimplemented!();
// The catch-all is private: there is no public field to drop a shadowing key into.
document.unknown = PortableExtensions::default();

The nested channel, for contrast, is checked rather than forbidden:

use tix::time_tracking::portable::{PortableTimeDocument, FORMAT};
use serde_json::json;

let mut document: PortableTimeDocument = unimplemented!();
document.insert_extension("format", json!("metadata, not a marker"));
let _ = FORMAT;

Implementations§

Source§

impl PortableExtensions

Source

pub fn new() -> Self

An empty bag.

Source

pub fn is_empty(&self) -> bool

Whether no metadata is present.

Source

pub fn len(&self) -> usize

The number of preserved keys.

Source

pub fn get(&self, key: &str) -> Option<&Value>

Look up a preserved key.

Source

pub fn keys(&self) -> impl Iterator<Item = &str>

The preserved keys, in canonical (sorted) order.

Source

pub fn as_map(&self) -> &Map<String, Value>

The underlying map, for a caller that must inspect it whole.

Trait Implementations§

Source§

impl Clone for PortableExtensions

Source§

fn clone(&self) -> Self

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 PortableExtensions

Source§

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

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

impl Default for PortableExtensions

Source§

fn default() -> Self

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

impl<'de> Deserialize<'de> for PortableExtensions

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 PortableExtensions

Source§

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

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

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

Inequality operator !=. Read more
Source§

impl Serialize for PortableExtensions

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 PortableExtensions

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> 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> 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> 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 = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

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.