pub struct Principal { /* private fields */ }
Expand description
Generic ID on Internet Computer.
Principals are generic identifiers for canisters, users and possibly other concepts in the future. As far as most uses of the IC are concerned they are opaque binary blobs with a length between 0 and 29 bytes, and there is intentionally no mechanism to tell canister ids and user ids apart.
Note a principal is not necessarily tied with a public key-pair, yet we need at least a key-pair of a related principal to sign requests.
A Principal can be serialized to a byte array (Vec<u8>
) or a text
representation, but the inner structure of the byte representation
is kept private.
Example of using a Principal object:
let text = "aaaaa-aa"; // The management canister ID.
let principal = Principal::from_text(text).expect("Could not decode the principal.");
assert_eq!(principal.as_slice(), &[] as &[u8]);
assert_eq!(principal.to_text(), text);
Similarly, serialization using serde has two versions: serilizing to a byte bufer for non-human readable serializer, and a string version for human readable serializers.
use serde::{Deserialize, Serialize};
use std::str::FromStr;
#[derive(Serialize)]
struct Data {
id: Principal,
}
let id = Principal::from_str("2chl6-4hpzw-vqaaa-aaaaa-c").unwrap();
// JSON is human readable, so this will serialize to a textual
// representation of the Principal.
assert_eq!(
serde_json::to_string(&Data { id: id.clone() }).unwrap(),
r#"{"id":"2chl6-4hpzw-vqaaa-aaaaa-c"}"#
);
// CBOR is not human readable, so will serialize to bytes.
assert_eq!(
serde_cbor::to_vec(&Data { id: id.clone() }).unwrap(),
&[161, 98, 105, 100, 73, 239, 205, 171, 0, 0, 0, 0, 0, 1],
);
Implementations
sourceimpl Principal
impl Principal
sourcepub const fn management_canister() -> Self
pub const fn management_canister() -> Self
Construct a Principal
of the IC management canister
sourcepub fn self_authenticating<P: AsRef<[u8]>>(public_key: P) -> Self
pub fn self_authenticating<P: AsRef<[u8]>>(public_key: P) -> Self
Construct a self-authenticating ID from public key
sourcepub const fn from_slice(slice: &[u8]) -> Self
pub const fn from_slice(slice: &[u8]) -> Self
sourcepub const fn try_from_slice(slice: &[u8]) -> Result<Self, PrincipalError>
pub const fn try_from_slice(slice: &[u8]) -> Result<Self, PrincipalError>
Construct a Principal
from a slice of bytes.
Trait Implementations
sourceimpl CandidType for Principal
impl CandidType for Principal
sourceimpl<'de> Deserialize<'de> for Principal
impl<'de> Deserialize<'de> for Principal
sourcefn deserialize<D: Deserializer<'de>>(
deserializer: D
) -> Result<Principal, D::Error>
fn deserialize<D: Deserializer<'de>>(
deserializer: D
) -> Result<Principal, D::Error>
sourceimpl Ord for Principal
impl Ord for Principal
1.21.0 · sourcefn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
1.21.0 · sourcefn min(self, other: Self) -> Selfwhere
Self: Sized,
fn min(self, other: Self) -> Selfwhere
Self: Sized,
1.50.0 · sourcefn clamp(self, min: Self, max: Self) -> Selfwhere
Self: Sized + PartialOrd<Self>,
fn clamp(self, min: Self, max: Self) -> Selfwhere
Self: Sized + PartialOrd<Self>,
sourceimpl PartialOrd<Principal> for Principal
impl PartialOrd<Principal> for Principal
sourcefn partial_cmp(&self, other: &Principal) -> Option<Ordering>
fn partial_cmp(&self, other: &Principal) -> Option<Ordering>
1.0.0 · sourcefn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moreimpl Copy for Principal
impl Eq for Principal
impl StructuralEq for Principal
impl StructuralPartialEq for Principal
Auto Trait Implementations
impl RefUnwindSafe for Principal
impl Send for Principal
impl Sync for Principal
impl Unpin for Principal
impl UnwindSafe for Principal
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
sourceimpl<T> ToHex for Twhere
T: AsRef<[u8]>,
impl<T> ToHex for Twhere
T: AsRef<[u8]>,
sourcefn encode_hex<U>(&self) -> Uwhere
U: FromIterator<char>,
fn encode_hex<U>(&self) -> Uwhere
U: FromIterator<char>,
self
into the result. Lower case
letters are used (e.g. f9b4ca
) Read moresourcefn encode_hex_upper<U>(&self) -> Uwhere
U: FromIterator<char>,
fn encode_hex_upper<U>(&self) -> Uwhere
U: FromIterator<char>,
self
into the result. Upper case
letters are used (e.g. F9B4CA
) Read more