devol_accounts_kit/accounts/oracles/
oracle_params.rs1use serde::{Deserialize, Serialize};
2use solana_program::pubkey::Pubkey;
3use crate::accounts::oracles::oracle_provider::OracleProvider;
4
5#[derive(PartialEq, PartialOrd, Copy, Clone, Serialize, Deserialize)]
6#[repr(u8)]
7pub enum DataLen {
8 Undefined,
9 U8, U32, U64, U128, } #[derive(PartialEq, PartialOrd, Copy, Clone, Serialize, Deserialize)]
17#[repr(u8)]
18pub enum Endian {
19 LE,
20 BE,
21} #[derive(Copy, Clone, Serialize, Deserialize)]
24#[repr(C)]
25pub struct OracleDataField{
26 pub data_len: DataLen, pub endian: Endian, pub reserved: [u8; 2], pub offset: i32, } #[cfg(test)]
33impl Default for OracleDataField {
34 fn default() -> Self {
35 Self {
36 reserved: [0; 2],
37 offset: 0,
38 data_len: DataLen::U32,
39 endian: Endian::LE,
40 }
41 }
42}
43
44pub const ORACLE_DATA_FIELDS_QUANTITY: usize = 3;
45pub const ORACLE_PARAMS_SIZE: usize = 64;
46
47#[derive(Copy, Clone, Serialize, Deserialize)]
48#[repr(C)]
49pub struct OracleParams {
50 pub version: u8, pub enabled: bool, pub provider: OracleProvider,
53 pub reserved: [u8; 1], pub max_timestamp_diff_sec: i32, pub account: Pubkey, pub mantissa: OracleDataField,
57 pub exponent: OracleDataField,
58 pub timestamp: OracleDataField,
59} #[cfg(test)]
62impl Default for OracleParams {
63 fn default() -> Self {
64 Self {
65 account: Pubkey::default(),
66 enabled: true,
67 provider: OracleProvider::Pyth,
68 reserved: [0; 1],
69 version: 0,
70 exponent: OracleDataField::default(),
71 mantissa: OracleDataField::default(),
72 timestamp: OracleDataField::default(),
73 max_timestamp_diff_sec: 0,
74 }
75 }
76}
77
78#[cfg(test)]
79mod tests {
80 use std::mem;
81 use crate::accounts::oracles::oracle_params::{ORACLE_PARAMS_SIZE, OracleParams};
82
83 #[test]
84 fn test_oracle_params() {
85 assert_eq!(mem::size_of::<OracleParams>(), ORACLE_PARAMS_SIZE, "Total size of OracleParams structure mismatch");
86 }
87}