| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- #![feature(adt_const_params)]
- #![allow(warnings)]
- pub use rocksalt::*;
- // Lacking:
- //
- // - Error is a lacking as its just a basic enum, maybe use errorcode.
- // - Client generation incomplete.
- // We need a few Solana things in scope in order to properly abstract Solana.
- use solana_program::{
- account_info::{
- next_account_info,
- AccountInfo,
- },
- entrypoint,
- entrypoint::ProgramResult,
- instruction::{
- AccountMeta,
- Instruction,
- },
- program::invoke_signed,
- program_error::ProgramError,
- program_pack::Pack,
- pubkey::Pubkey,
- rent::Rent,
- system_instruction,
- system_program,
- sysvar::{
- self,
- SysvarId,
- },
- };
- use std::{
- io::{
- ErrorKind,
- Write,
- },
- marker::PhantomData,
- ops::{
- Deref,
- DerefMut,
- },
- slice::Iter,
- string::FromUtf8Error,
- };
- pub use borsh::{
- BorshDeserialize,
- BorshSerialize,
- };
- // Expose all submodules for consumption.
- pub mod error;
- pub mod macros;
- pub mod processors;
- pub mod types;
- // We can also re-export a set of types at module scope, this defines the intended API we expect
- // people to be able to use from top-level.
- pub use crate::{
- error::{
- ErrBox,
- Result,
- SolitaireError,
- },
- macros::*,
- processors::{
- keyed::Keyed,
- peel::Peel,
- persist::Persist,
- seeded::{
- invoke_seeded,
- AccountOwner,
- AccountSize,
- Creatable,
- Owned,
- Seeded,
- },
- },
- types::*,
- };
- /// Library name and version to print in entrypoint. Must be evaluated in this crate in order to do the right thing
- pub const PKG_NAME_VERSION: &'static str =
- concat!(env!("CARGO_PKG_NAME"), " ", env!("CARGO_PKG_VERSION"));
- pub struct ExecutionContext<'a, 'b: 'a> {
- /// A reference to the program_id of the current program.
- pub program_id: &'a Pubkey,
- /// All accounts passed into the program
- pub accounts: &'a [AccountInfo<'b>],
- }
- /// Lamports to pay to an account being created
- pub enum CreationLamports {
- Exempt,
- Amount(u64),
- }
- impl CreationLamports {
- /// Amount of lamports to be paid in account creation
- pub fn amount(self, size: usize) -> u64 {
- match self {
- CreationLamports::Exempt => Rent::default().minimum_balance(size),
- CreationLamports::Amount(v) => v,
- }
- }
- }
- pub trait InstructionContext<'a> {
- fn deps(&self) -> Vec<Pubkey> {
- vec![]
- }
- }
- /// Trait definition that describes types that can be constructed from a list of solana account
- /// references. A list of dependent accounts is produced as a side effect of the parsing stage.
- pub trait FromAccounts<'a, 'b: 'a, 'c> {
- fn from<T>(_: &'a Pubkey, _: &'c mut Iter<'a, AccountInfo<'b>>, _: &'a T) -> Result<Self>
- where
- Self: Sized;
- }
|