use std::ops::Deref;
use num::bigint::BigInt;
pub const BERT_LABEL: &str = "bert";
pub const ETF_VERSION: u8 = 131u8;
#[derive(Debug, Copy, Clone, PartialEq)]
pub enum BertTag {
NewFloat = 70,
SmallInteger = 97, Integer = 98, Float = 99, Atom = 100,
SmallTuple = 104, LargeTuple = 105, Nil = 106, String = 107, List = 108, Binary = 109, SmallBigNum = 110, LargeBigNum = 111, }
#[derive(Debug, PartialEq)]
pub struct BertBigInteger(pub BigInt);
impl Deref for BertBigInteger {
type Target = BigInt;
fn deref(&self) -> &Self::Target {
&self.0
}
}
#[derive(Debug, PartialEq)]
pub struct BertTime(TimeStruct);
impl BertTime {
pub fn new(megaseconds: i32, seconds: i32, microseconds: i32) -> BertTime {
BertTime(
TimeStruct {
megaseconds,
seconds,
microseconds,
}
)
}
}
impl Deref for BertTime {
type Target = TimeStruct;
fn deref(&self) -> &Self::Target {
&self.0
}
}
#[derive(Debug, PartialEq)]
pub struct TimeStruct {
pub megaseconds: i32,
pub seconds: i32,
pub microseconds: i32,
}
#[derive(Debug, PartialEq)]
pub struct BertRegex(RegexStruct);
impl BertRegex {
pub fn new(source: &str, options: Vec<RegexOption>) -> BertRegex {
BertRegex(
RegexStruct {
source: source.to_string(),
options,
}
)
}
}
impl Deref for BertRegex {
type Target = RegexStruct;
fn deref(&self) -> &Self::Target {
&self.0
}
}
#[derive(Debug, PartialEq)]
pub struct RegexStruct {
pub source: String,
pub options: Vec<RegexOption>
}
enum_str!(
RegexOption {
Extended("extended"),
Caseless("caseless"),
Multiline("multiline"),
DotAll("dotall"),
}
);