Struct candid::Principal [−][src]
pub struct Principal(_);
Expand description
A principal describes the security context of an identity, namely any identity that can be authenticated along with a specific role. In the case of the Internet Computer this maps currently to the identities that can be authenticated by a canister. For example, a canister ID is a Principal. So is a user.
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:
use ic_types::Principal;
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(), &[]);
assert_eq!(principal.to_text(), text);
Serialization is enabled with the “serde” feature. It supports serializing to a byte bufer for non-human readable serializer, and a string version for human readable serializers.
use ic_types::Principal;
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
An empty principal that marks the system canister.
Right now we are enforcing a Twisted Edwards Curve 25519 point as the public key.
Attempt to decode a slice into a Principal.
Panics
Panics if the bytes can’t be interpreted.
Examples
const FOO: Principal = Principal::from_slice(&[0; 29]); // normal length
const MGMT: Principal = Principal::from_slice(&[]); // management
const OPQ: Principal = Principal::from_slice(&[4,3,2,1]); // opaque id
const BAR: Principal = Principal::from_slice(&[0; 32]); // Fails, too long
// Fails, ends in 0x04 (anonymous), but has a prefix
const BAZ: Principal = Principal::from_slice(&[1,2,3,4]);
Attempt to decode a slice into a Principal.
Parse the text format for canister IDs (e.g., jkies-sibbb-ap6
).
The text format follows the public spec (see Textual IDs section).
Returns this Principal’s text representation. The text representation is described in the spec.
Trait Implementations
pub fn deserialize<D>(
deserializer: D
) -> Result<Principal, <D as Deserializer<'de>>::Error> where
D: Deserializer<'de>,
pub fn deserialize<D>(
deserializer: D
) -> Result<Principal, <D as Deserializer<'de>>::Error> where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
This method returns an ordering between self
and other
values if one exists. Read more
This method tests less than (for self
and other
) and is used by the <
operator. Read more
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
pub fn serialize<S>(
&self,
serializer: S
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error> where
S: Serializer,
pub fn serialize<S>(
&self,
serializer: S
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error> where
S: Serializer,
Serialize this value into the given Serde serializer. Read more
Implement try_from for a generic sized slice.
Vector TryFrom. The slice and array version of this trait are defined below.
Auto Trait Implementations
impl RefUnwindSafe for Principal
impl UnwindSafe for Principal
Blanket Implementations
Mutably borrows from an owned value. Read more