clockwork_http/state/
api.rs

1use {
2    anchor_lang::{prelude::*, AnchorDeserialize},
3    std::convert::TryFrom,
4};
5
6pub const SEED_API: &[u8] = b"api";
7
8/**
9 * Api
10 */
11
12#[account]
13#[derive(Debug)]
14pub struct Api {
15    pub ack_authority: Pubkey,
16    pub authority: Pubkey,
17    pub base_url: String,
18    pub request_count: u64,
19}
20
21impl Api {
22    pub fn pubkey(authority: Pubkey, base_url: String) -> Pubkey {
23        Pubkey::find_program_address(
24            &[SEED_API, authority.as_ref(), base_url.as_bytes().as_ref()],
25            &crate::ID,
26        )
27        .0
28    }
29}
30
31impl TryFrom<Vec<u8>> for Api {
32    type Error = Error;
33    fn try_from(data: Vec<u8>) -> std::result::Result<Self, Self::Error> {
34        Api::try_deserialize(&mut data.as_slice())
35    }
36}
37
38/**
39 * ApiAccount
40 */
41
42pub trait ApiAccount {
43    fn new(&mut self, ack_authority: Pubkey, authority: Pubkey, base_url: String) -> Result<()>;
44}
45
46impl ApiAccount for Account<'_, Api> {
47    fn new(&mut self, ack_authority: Pubkey, authority: Pubkey, base_url: String) -> Result<()> {
48        self.ack_authority = ack_authority;
49        self.authority = authority;
50        self.base_url = base_url;
51        self.request_count = 0;
52        Ok(())
53    }
54}