pub struct Plan {
pub merchant: Pubkey,
pub plan_id: [u8; 32],
pub price_usdc: u64,
pub period_secs: u64,
pub grace_secs: u64,
pub name: [u8; 32],
pub active: bool,
}Expand description
Plan account defines subscription plan details
PDA seeds: [“plan”, merchant, plan_id]
Fields§
§merchant: PubkeyReference to the merchant PDA
plan_id: [u8; 32]Deterministic plan identifier (string as bytes, padded to 32)
price_usdc: u64Price in USDC microlamports (6 decimals)
period_secs: u64Subscription period in seconds
grace_secs: u64Grace period for renewals in seconds
name: [u8; 32]Plan display name (string as bytes, padded to 32)
active: boolWhether new subscriptions can be created for this plan
Implementations§
Source§impl Plan
impl Plan
Sourcepub fn plan_id_str(&self) -> String
pub fn plan_id_str(&self) -> String
Convert plan_id bytes to string, trimming null bytes
Sourcepub fn plan_id_string(&self) -> String
pub fn plan_id_string(&self) -> String
Get plan ID as string, removing null padding (alias for plan_id_str)
Sourcepub fn name_string(&self) -> String
pub fn name_string(&self) -> String
Get plan name as string, removing null padding (alias for name_str)
Sourcepub fn price_usdc_formatted(&self) -> f64
pub fn price_usdc_formatted(&self) -> f64
Get plan price in USDC (human readable, with 6 decimals)
Sourcepub fn period_formatted(&self) -> String
pub fn period_formatted(&self) -> String
Get period in human readable format
Trait Implementations§
Source§impl BorshDeserialize for Planwhere
Pubkey: BorshDeserialize,
[u8; 32]: BorshDeserialize,
u64: BorshDeserialize,
bool: BorshDeserialize,
impl BorshDeserialize for Planwhere
Pubkey: BorshDeserialize,
[u8; 32]: BorshDeserialize,
u64: BorshDeserialize,
bool: BorshDeserialize,
fn deserialize_reader<R: Read>(reader: &mut R) -> Result<Self, Error>
Source§fn deserialize(buf: &mut &[u8]) -> Result<Self, Error>
fn deserialize(buf: &mut &[u8]) -> Result<Self, Error>
Deserializes this instance from a given slice of bytes.
Updates the buffer to point at the remaining bytes.
Source§fn try_from_slice(v: &[u8]) -> Result<Self, Error>
fn try_from_slice(v: &[u8]) -> Result<Self, Error>
Deserialize this instance from a slice of bytes.
fn try_from_reader<R>(reader: &mut R) -> Result<Self, Error>where
R: Read,
Source§impl BorshSerialize for Plan
impl BorshSerialize for Plan
Source§impl<'de> Deserialize<'de> for Plan
impl<'de> Deserialize<'de> for Plan
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
impl Eq for Plan
impl StructuralPartialEq for Plan
Auto Trait Implementations§
impl Freeze for Plan
impl RefUnwindSafe for Plan
impl Send for Plan
impl Sync for Plan
impl Unpin for Plan
impl UnwindSafe for Plan
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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