pub struct ApiKeyView<'a> {Show 16 fields
pub key_id: &'a str,
pub label: &'a str,
pub icon: &'a str,
pub color: &'a str,
pub ip_whitelist: RepeatedView<'a, &'a str>,
pub status: EnumValue<ApiKeyStatus>,
pub subaccount_id: Option<u64>,
pub policy_id: Option<u64>,
pub created_at: MessageFieldView<TimestampView<'a>>,
pub last_used_at: MessageFieldView<TimestampView<'a>>,
pub public_key_ed25519: &'a [u8],
pub expires_at: MessageFieldView<TimestampView<'a>>,
pub created_by_actor: &'a str,
pub updated_at: MessageFieldView<TimestampView<'a>>,
pub revision: u64,
pub __buffa_unknown_fields: UnknownFieldsView<'a>,
}Expand description
ApiKey is public API key metadata. It never includes the private key or seed.
Fields§
§key_id: &'a strStable opaque identifier used to refer to this key, formatted as “ak_” followed by 32 lowercase hex characters.
Field 2: key_id
label: &'a strHuman-readable label for the key. Maximum length is 64 characters.
Field 3: label
icon: &'a strOptional user-chosen icon/emoji for UI display.
Field 9: icon
color: &'a strOptional user-chosen color token for UI display.
Field 10: color
ip_whitelist: RepeatedView<'a, &'a str>Optional CIDR whitelist. Empty means no IP restriction. Maximum 32 unique entries.
Field 4: ip_whitelist
status: EnumValue<ApiKeyStatus>Current key status.
Field 6: status
subaccount_id: Option<u64>Optional sub-account this key is scoped to (opaque ID; empty = root-level).
Field 7: subaccount_id
policy_id: Option<u64>Optional API policy attached to this key (opaque ID). Empty means “no per-key policy”, so only the sub-account policy (and roles) apply.
Field 8: policy_id
created_at: MessageFieldView<TimestampView<'a>>Time in UTC when this key was created.
Field 20: created_at
last_used_at: MessageFieldView<TimestampView<'a>>Last time in UTC when this key authenticated a request. Omitted when the key has not been used.
Field 21: last_used_at
public_key_ed25519: &'a [u8]Ed25519 public key bytes associated with this API key. The private key or seed is never returned by the API.
Field 22: public_key_ed25519
expires_at: MessageFieldView<TimestampView<'a>>Optional expiry time in UTC. When set, the key cannot authenticate requests after this time, regardless of status.
Field 23: expires_at
created_by_actor: &'a strRead-only actor label describing who created this key, such as a username or account label.
Field 24: created_by_actor
updated_at: MessageFieldView<TimestampView<'a>>Time in UTC when this key’s configuration was last changed. For the same key, later is fresher, equal is an idempotent replay, and earlier is stale. Equal timestamps with different configuration indicate an invariant failure. This is independent of last_used_at, which tracks authentication activity.
Field 25: updated_at
revision: u64Monotonic resource revision used for conditional updates.
Field 26: revision
__buffa_unknown_fields: UnknownFieldsView<'a>Trait Implementations§
Source§impl<'a> Clone for ApiKeyView<'a>
impl<'a> Clone for ApiKeyView<'a>
Source§fn clone(&self) -> ApiKeyView<'a>
fn clone(&self) -> ApiKeyView<'a>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<'a> Debug for ApiKeyView<'a>
impl<'a> Debug for ApiKeyView<'a>
Source§impl<'a> Default for ApiKeyView<'a>
impl<'a> Default for ApiKeyView<'a>
Source§fn default() -> ApiKeyView<'a>
fn default() -> ApiKeyView<'a>
Source§impl<'v> DefaultViewInstance for ApiKeyView<'v>
impl<'v> DefaultViewInstance for ApiKeyView<'v>
Source§fn default_view_instance<'a>() -> &'a Selfwhere
Self: 'a,
fn default_view_instance<'a>() -> &'a Selfwhere
Self: 'a,
Source§impl<'a> MessageName for ApiKeyView<'a>
impl<'a> MessageName for ApiKeyView<'a>
Source§const PACKAGE: &'static str = "auth.v1"
const PACKAGE: &'static str = "auth.v1"
Source§const NAME: &'static str = "ApiKey"
const NAME: &'static str = "ApiKey"
. between nesting levels. Read moreSource§impl<'a> MessageView<'a> for ApiKeyView<'a>
impl<'a> MessageView<'a> for ApiKeyView<'a>
Source§fn decode_view(buf: &'a [u8]) -> Result<Self, DecodeError>
fn decode_view(buf: &'a [u8]) -> Result<Self, DecodeError>
Source§fn decode_view_with_ctx(
buf: &'a [u8],
ctx: DecodeContext<'_>,
) -> Result<Self, DecodeError>
fn decode_view_with_ctx( buf: &'a [u8], ctx: DecodeContext<'_>, ) -> Result<Self, DecodeError>
Source§fn merge_view_field(
&mut self,
tag: Tag,
cur: &'a [u8],
before_tag: &'a [u8],
ctx: DecodeContext<'_>,
) -> Result<&'a [u8], DecodeError>
fn merge_view_field( &mut self, tag: Tag, cur: &'a [u8], before_tag: &'a [u8], ctx: DecodeContext<'_>, ) -> Result<&'a [u8], DecodeError>
Source§fn to_owned_message(&self) -> Result<ApiKey, DecodeError>
fn to_owned_message(&self) -> Result<ApiKey, DecodeError>
Source§fn to_owned_from_source(
&self,
__buffa_src: Option<&Bytes>,
) -> Result<ApiKey, DecodeError>
fn to_owned_from_source( &self, __buffa_src: Option<&Bytes>, ) -> Result<ApiKey, DecodeError>
bytes::Bytes-typed fields from source instead of copying. Read moreSource§fn decode_view_ctx(
buf: &'a [u8],
ctx: DecodeContext<'_>,
) -> Result<Self, DecodeError>where
Self: Default,
fn decode_view_ctx(
buf: &'a [u8],
ctx: DecodeContext<'_>,
) -> Result<Self, DecodeError>where
Self: Default,
DecodeContext
(remaining recursion depth and unknown-field allowance), driving the
provided tag loop over merge_view_field. Read moreSource§fn merge_into_view(
&mut self,
buf: &'a [u8],
ctx: DecodeContext<'_>,
) -> Result<(), DecodeError>
fn merge_into_view( &mut self, buf: &'a [u8], ctx: DecodeContext<'_>, ) -> Result<(), DecodeError>
buf into this view (proto merge semantics):
repeated fields append, singular fields last-wins, singular message
fields merge recursively. Read moreSource§impl<'__a> Serialize for ApiKeyView<'__a>
Serializes this view as protobuf JSON.
impl<'__a> Serialize for ApiKeyView<'__a>
Serializes this view as protobuf JSON.
Implicit-presence fields with default values are omitted, required
fields are always emitted, explicit-presence (optional) fields are
emitted only when set, bytes fields are base64-encoded, and enum
values are their proto name strings.
This impl uses serialize_map(None) because the number of emitted
fields depends on default-omission rules; serializers that require
known map lengths (e.g. bincode) will return a runtime error.
Use the owned message type for those formats.
Source§impl<'a> ViewEncode<'a> for ApiKeyView<'a>
impl<'a> ViewEncode<'a> for ApiKeyView<'a>
Source§fn compute_size(&self, __cache: &mut SizeCache) -> u32
fn compute_size(&self, __cache: &mut SizeCache) -> u32
Source§fn write_to(&self, __cache: &mut SizeCache, buf: &mut impl BufMut)
fn write_to(&self, __cache: &mut SizeCache, buf: &mut impl BufMut)
cache (populated by a prior
compute_size call on the same cache). Read moreSource§fn encode(&self, buf: &mut impl BufMut)
fn encode(&self, buf: &mut impl BufMut)
Source§fn encode_with_cache(&self, cache: &mut SizeCache, buf: &mut impl BufMut)
fn encode_with_cache(&self, cache: &mut SizeCache, buf: &mut impl BufMut)
SizeCache, for
reuse across many encodes in a hot loop. Clears the cache first.Source§fn encoded_len(&self) -> u32
fn encoded_len(&self) -> u32
Source§fn encode_length_delimited(&self, buf: &mut impl BufMut)
fn encode_length_delimited(&self, buf: &mut impl BufMut)
Source§fn encode_to_bytes(&self) -> Bytes
fn encode_to_bytes(&self) -> Bytes
bytes::Bytes.Source§impl ViewReborrow for ApiKeyView<'static>
impl ViewReborrow for ApiKeyView<'static>
Source§type Reborrowed<'b> = ApiKeyView<'b>
type Reborrowed<'b> = ApiKeyView<'b>
'b.Source§fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b>
fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b>
&'b Self (= &'b FooView<'static>) to
&'b Self::Reborrowed<'b> (= &'b FooView<'b>). The canonical body
is just this; the compiler accepts it via standard lifetime
variance for covariant view types. Read more