2022-04-12 07:19:58 -07:00
|
|
|
use crate::error::MangoError;
|
2022-03-16 08:23:06 -07:00
|
|
|
use anchor_lang::prelude::*;
|
|
|
|
|
2022-03-04 05:30:53 -08:00
|
|
|
#[macro_export]
|
|
|
|
macro_rules! zip {
|
|
|
|
($x: expr) => ($x);
|
|
|
|
($x: expr, $($y: expr), +) => (
|
|
|
|
$x.zip(
|
|
|
|
zip!($($y), +))
|
|
|
|
)
|
2022-03-02 21:15:28 -08:00
|
|
|
}
|
2022-03-22 02:51:15 -07:00
|
|
|
#[allow(unused_imports)]
|
2022-03-04 05:30:53 -08:00
|
|
|
pub(crate) use zip;
|
2022-03-11 00:57:30 -08:00
|
|
|
|
2022-08-12 07:05:32 -07:00
|
|
|
pub fn fill_from_str<const N: usize>(name: &str) -> Result<[u8; N]> {
|
2022-04-12 07:19:58 -07:00
|
|
|
let name_bytes = name.as_bytes();
|
2022-08-12 07:05:32 -07:00
|
|
|
require!(name_bytes.len() < N, MangoError::SomeError);
|
|
|
|
let mut name_ = [0u8; N];
|
2022-04-12 07:19:58 -07:00
|
|
|
name_[..name_bytes.len()].copy_from_slice(name_bytes);
|
|
|
|
Ok(name_)
|
2022-03-24 09:29:30 -07:00
|
|
|
}
|
2022-04-12 11:23:45 -07:00
|
|
|
|
2022-08-12 07:05:32 -07:00
|
|
|
pub fn format_zero_terminated_utf8_bytes(
|
|
|
|
name: &[u8],
|
|
|
|
fmt: &mut std::fmt::Formatter,
|
|
|
|
) -> std::result::Result<(), std::fmt::Error> {
|
|
|
|
fmt.write_str(
|
|
|
|
std::str::from_utf8(name)
|
|
|
|
.unwrap()
|
|
|
|
.trim_matches(char::from(0)),
|
|
|
|
)
|
2022-04-12 11:23:45 -07:00
|
|
|
}
|