use std::convert::From;
pub const ELEMENT_TYPE_FLOATING_POINT: u8 = 0x01;
pub const ELEMENT_TYPE_UTF8_STRING: u8 = 0x02;
pub const ELEMENT_TYPE_EMBEDDED_DOCUMENT: u8 = 0x03;
pub const ELEMENT_TYPE_ARRAY: u8 = 0x04;
pub const ELEMENT_TYPE_BINARY: u8 = 0x05;
pub const ELEMENT_TYPE_UNDEFINED: u8 = 0x06; pub const ELEMENT_TYPE_OBJECT_ID: u8 = 0x07;
pub const ELEMENT_TYPE_BOOLEAN: u8 = 0x08;
pub const ELEMENT_TYPE_UTC_DATETIME: u8 = 0x09;
pub const ELEMENT_TYPE_NULL_VALUE: u8 = 0x0A;
pub const ELEMENT_TYPE_REGULAR_EXPRESSION: u8 = 0x0B;
pub const ELEMENT_TYPE_DBPOINTER: u8 = 0x0C; pub const ELEMENT_TYPE_JAVASCRIPT_CODE: u8 = 0x0D;
pub const ELEMENT_TYPE_SYMBOL: u8 = 0x0E; pub const ELEMENT_TYPE_JAVASCRIPT_CODE_WITH_SCOPE: u8 = 0x0F;
pub const ELEMENT_TYPE_32BIT_INTEGER: u8 = 0x10;
pub const ELEMENT_TYPE_TIMESTAMP: u8 = 0x11;
pub const ELEMENT_TYPE_64BIT_INTEGER: u8 = 0x12;
pub const ELEMENT_TYPE_MINKEY: u8 = 0xFF;
pub const ELEMENT_TYPE_MAXKEY: u8 = 0x7F;
pub const BINARY_SUBTYPE_GENERIC: u8 = 0x00;
pub const BINARY_SUBTYPE_FUNCTION: u8 = 0x01;
pub const BINARY_SUBTYPE_BINARY_OLD: u8 = 0x02;
pub const BINARY_SUBTYPE_UUID_OLD: u8 = 0x03;
pub const BINARY_SUBTYPE_UUID: u8 = 0x04;
pub const BINARY_SUBTYPE_MD5: u8 = 0x05;
#[repr(u8)]
#[derive(Debug, Eq, PartialEq)]
pub enum ElementType {
FloatingPoint = ELEMENT_TYPE_FLOATING_POINT,
Utf8String = ELEMENT_TYPE_UTF8_STRING,
EmbeddedDocument = ELEMENT_TYPE_EMBEDDED_DOCUMENT,
Array = ELEMENT_TYPE_ARRAY,
Binary = ELEMENT_TYPE_BINARY,
Undefined = ELEMENT_TYPE_UNDEFINED,
ObjectId = ELEMENT_TYPE_OBJECT_ID,
Boolean = ELEMENT_TYPE_BOOLEAN,
UtcDatetime = ELEMENT_TYPE_UTC_DATETIME,
NullValue = ELEMENT_TYPE_NULL_VALUE,
RegularExpression = ELEMENT_TYPE_REGULAR_EXPRESSION,
DbPointer = ELEMENT_TYPE_DBPOINTER,
JavaScriptCode = ELEMENT_TYPE_JAVASCRIPT_CODE,
Symbol = ELEMENT_TYPE_SYMBOL,
JavaScriptCodeWithScope = ELEMENT_TYPE_JAVASCRIPT_CODE_WITH_SCOPE,
Integer32Bit = ELEMENT_TYPE_32BIT_INTEGER,
TimeStamp = ELEMENT_TYPE_TIMESTAMP,
Integer64Bit = ELEMENT_TYPE_64BIT_INTEGER,
MaxKey = ELEMENT_TYPE_MAXKEY,
MinKey = ELEMENT_TYPE_MINKEY,
}
impl ElementType {
#[inline]
pub fn from(tag: u8) -> Option<ElementType> {
use self::ElementType::*;
Some(match tag {
ELEMENT_TYPE_FLOATING_POINT => FloatingPoint,
ELEMENT_TYPE_UTF8_STRING => Utf8String,
ELEMENT_TYPE_EMBEDDED_DOCUMENT => EmbeddedDocument,
ELEMENT_TYPE_ARRAY => Array,
ELEMENT_TYPE_BINARY => Binary,
ELEMENT_TYPE_UNDEFINED => Undefined,
ELEMENT_TYPE_OBJECT_ID => ObjectId,
ELEMENT_TYPE_BOOLEAN => Boolean,
ELEMENT_TYPE_UTC_DATETIME => UtcDatetime,
ELEMENT_TYPE_NULL_VALUE => NullValue,
ELEMENT_TYPE_REGULAR_EXPRESSION => RegularExpression,
ELEMENT_TYPE_DBPOINTER => DbPointer,
ELEMENT_TYPE_JAVASCRIPT_CODE => JavaScriptCode,
ELEMENT_TYPE_SYMBOL => Symbol,
ELEMENT_TYPE_JAVASCRIPT_CODE_WITH_SCOPE => JavaScriptCodeWithScope,
ELEMENT_TYPE_32BIT_INTEGER => Integer32Bit,
ELEMENT_TYPE_TIMESTAMP => TimeStamp,
ELEMENT_TYPE_64BIT_INTEGER => Integer64Bit,
ELEMENT_TYPE_MAXKEY => MaxKey,
ELEMENT_TYPE_MINKEY => MinKey,
_ => return None,
})
}
}
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub enum BinarySubtype {
Generic,
Function,
BinaryOld,
UuidOld,
Uuid,
Md5,
UserDefined(u8),
}
impl From<BinarySubtype> for u8 {
#[inline]
fn from(t: BinarySubtype) -> u8 {
match t {
BinarySubtype::Generic => BINARY_SUBTYPE_GENERIC,
BinarySubtype::Function => BINARY_SUBTYPE_FUNCTION,
BinarySubtype::BinaryOld => BINARY_SUBTYPE_BINARY_OLD,
BinarySubtype::UuidOld => BINARY_SUBTYPE_UUID_OLD,
BinarySubtype::Uuid => BINARY_SUBTYPE_UUID,
BinarySubtype::Md5 => BINARY_SUBTYPE_MD5,
BinarySubtype::UserDefined(x) => x,
}
}
}
impl From<u8> for BinarySubtype {
#[inline]
fn from(t: u8) -> BinarySubtype {
match t {
BINARY_SUBTYPE_GENERIC => BinarySubtype::Generic,
BINARY_SUBTYPE_FUNCTION => BinarySubtype::Function,
BINARY_SUBTYPE_BINARY_OLD => BinarySubtype::BinaryOld,
BINARY_SUBTYPE_UUID_OLD => BinarySubtype::UuidOld,
BINARY_SUBTYPE_UUID => BinarySubtype::Uuid,
BINARY_SUBTYPE_MD5 => BinarySubtype::Md5,
_ => BinarySubtype::UserDefined(t),
}
}
}