54 lines
1.3 KiB
Plaintext
54 lines
1.3 KiB
Plaintext
module pyth::price_status {
|
|
use pyth::error;
|
|
|
|
/// The price feed is not currently updating for an unknown reason.
|
|
const UNKNOWN: u64 = 0;
|
|
/// The price feed is updating as expected.
|
|
const TRADING: u64 = 1;
|
|
|
|
/// PriceStatus represents the availability status of a price feed.
|
|
/// Prices should only be used if they have a status of trading.
|
|
struct PriceStatus has copy, drop, store {
|
|
status: u64,
|
|
}
|
|
|
|
public fun from_u64(status: u64): PriceStatus {
|
|
assert!(status <= TRADING, error::invalid_price_status());
|
|
PriceStatus {
|
|
status: status
|
|
}
|
|
}
|
|
|
|
public fun get_status(price_status: &PriceStatus): u64 {
|
|
price_status.status
|
|
}
|
|
|
|
public fun new_unknown(): PriceStatus {
|
|
PriceStatus {
|
|
status: UNKNOWN,
|
|
}
|
|
}
|
|
|
|
public fun new_trading(): PriceStatus {
|
|
PriceStatus {
|
|
status: TRADING,
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fun test_unknown_status() {
|
|
assert!(PriceStatus{ status: UNKNOWN } == from_u64(0), 1);
|
|
}
|
|
|
|
#[test]
|
|
fun test_trading_status() {
|
|
assert!(PriceStatus{ status: TRADING } == from_u64(1), 1);
|
|
}
|
|
|
|
#[test]
|
|
#[expected_failure(abort_code = 65559)]
|
|
fun test_invalid_price_status() {
|
|
from_u64(3);
|
|
}
|
|
}
|