clockwork_http/state/
api.rs1use {
2 anchor_lang::{prelude::*, AnchorDeserialize},
3 std::convert::TryFrom,
4};
5
6pub const SEED_API: &[u8] = b"api";
7
8#[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
38pub 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}