[][src]Struct pbd::dtc::Tracker

pub struct Tracker { /* fields omitted */ }

Represents a Tacker (a.k.a. MarkerChain)

Methods

impl Tracker[src]

pub fn new(dat_id: String) -> Tracker[src]

Constructs a Tracker (a.k.a. MarkerChain)

Arguments

  • dat_id: String - The unique identifier of the the data being tracked.

#Example

extern crate pbd;

use pbd::dtc::Tracker;

fn main() {
    let tracker = Tracker::new("order~clothing~iStore~15150".to_string());
     
    // The genesis Marker is automaically created for you
    assert_eq!(tracker.len(), 1);
}

pub fn add(&mut self, tmstp: u64, act_id: String, dat_id: String)[src]

Appends a new Marker to the end of the Marker Chain. The index of the Marker and hash from the previous Marker are automatically defined when added.

Arguments

  • tmstp: String - The date and time (Unix timestamp) the data came into posession of the Actor.
  • act_id: String - The unique identifier of the Actor touching the data.
  • dat_id: String - The unique identifier of the data being tracked.

#Example

extern crate pbd;

use pbd::dtc::Tracker;

fn main() {
    let mut tracker = Tracker::new("order~clothing~iStore~15150".to_string());
    tracker.add(1578071239, "notifier~billing~receipt~email".to_string(), "order~clothing~iStore~15150".to_string());
     
    println!("There are {} items in the Marker Chain.", tracker.len());
}

pub fn from_serialized(serialized: &str) -> Result<Tracker, Error>[src]

Constructs a Tracker (a.k.a. MarkerChain) from a serialized chain

Arguments

  • serialized: &str - The serialized Vec of Markers.

#Example

extern crate pbd;

use pbd::dtc::Tracker;

fn main() {
    let tracker = Tracker::from_serialized(r#"[{"identifier":{"data_id":"order~clothing~iStore~15150","index":0,"timestamp":0,"actor_id":""},"hash":"185528985830230566760236203228589250556","previous_hash":"0","nonce":5},{"identifier":{"data_id":"order~clothing~iStore~15150","index":1,"timestamp":1578071239,"actor_id":"notifier~billing~receipt~email"},"hash":"291471950171806362795097431348191551247","previous_hash":"185528985830230566760236203228589250556","nonce":5}]"#);
     
    // unwrap() to get the Tracker is Result is Ok
    assert!(tracker.is_ok());
}

pub fn get(&self, index: usize) -> Option<Marker>[src]

Returns the Marker from the Marker Chain at the specified index.

Arguments

  • index: usize - The index of the Marker.

#Example

extern crate pbd;

use pbd::dtc::Tracker;

fn main() {
    let mut tracker = Tracker::new("order~clothing~iStore~15150".to_string());
    let marker = tracker.get(0).unwrap();
     
    println!("{}", marker.identifier.data_id);
}

pub fn is_valid(&self) -> bool[src]

Determines if the Tracker has a valid Marker Chain, (a.k.a. not been tampered with).

#Example

extern crate pbd;

use pbd::dtc::Tracker;

fn main() {
    let mut mkrchn = Tracker::new("order~clothing~iStore~15150".to_string());
    mkrchn.add(1578071239, "notifier~billing~receipt~email".to_string(), "order~clothing~iStore~15150".to_string());

    assert!(Tracker::is_valid(&mkrchn));
}

pub fn len(&self) -> usize[src]

Returns the length of the Tracker's Marker Chain.

#Example

extern crate pbd;

use pbd::dtc::Tracker;

fn main() {
    let mut tracker = Tracker::new("order~clothing~iStore~15150".to_string());
    tracker.add(1578071239, "notifier~billing~receipt~email".to_string(), "order~clothing~iStore~15150".to_string());
     
    // The Tracker has two Markers: the genesis Marker when new() was called, and the one that was added
    assert_eq!(tracker.len(), 2);
}

pub fn serialize(&self) -> String[src]

Serializes the Tracker's Marker Chain.

#Example

extern crate pbd;

use pbd::dtc::Tracker;

fn main() {
    let mut tracker = Tracker::new("order~clothing~iStore~15150".to_string());
    tracker.add(1578071239, "notifier~billing~receipt~email".to_string(), "order~clothing~iStore~15150".to_string());
     
    println!("{}", tracker.serialize());
}

Trait Implementations

impl Clone for Tracker[src]

impl Debug for Tracker[src]

impl<'de> Deserialize<'de> for Tracker[src]

impl Display for Tracker[src]

impl FromRequest for Tracker[src]

type Config = ()

Configuration for this extractor

type Future = Result<Self, Self::Error>

Future that resolves to a Self

type Error = LocalError

The associated error which can be returned.

impl Serialize for Tracker[src]

impl TrackerHeader for Tracker[src]

fn tracker_from_header_value(
    header_value: &HeaderValue
) -> Result<Tracker, Error>
[src]

Constructs a Tracker from the http header that contains the serialized value of the MarkerChain

#Example

extern crate pbd;
extern crate actix_web;

use pbd::dtc::Tracker;
use pbd::dtc::extractor::actix::TrackerHeader;
use actix_web::http::header::HeaderValue;

fn main() {
    // NOTE: The header value must be Base64 encoded
    let header_value = HeaderValue::from_static("W3siaWRlbnRpZmllciI6eyJkYXRhX2lkIjoib3JkZXJ+Y2xvdGhpbmd+aVN0b3JlfjE1MTUwIiwiaW5kZXgiOjAsInRpbWVzdGFtcCI6MCwiYWN0b3JfaWQiOiIifSwiaGFzaCI6IjE4NTUyODk4NTgzMDIzMDU2Njc2MDIzNjIwMzIyODU4OTI1MDU1NiIsInByZXZpb3VzX2hhc2giOiIwIiwibm9uY2UiOjV9XQ=="); 
    let tracker = Tracker::tracker_from_header_value(&header_value);
     
    assert!(tracker.is_ok());
}

Auto Trait Implementations

impl RefUnwindSafe for Tracker

impl Send for Tracker

impl Sync for Tracker

impl Unpin for Tracker

impl UnwindSafe for Tracker

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

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

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> Same<T> for T

type Output = T

Should always be Self

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T> ToString for T where
    T: Display + ?Sized
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 

type Err = <U as TryFrom<T>>::Err

impl<V, T> VZip<V> for T where
    V: MultiLane<T>,