1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
use std::str::FromStr; pub enum FieldType { Unit, String, EncryptedString, Nothing, Any, Boolean, Byte, Short, Integer, Long, Float, Double, BigDecimal, ByteArray, Uuid, Date, Time, Timestamp, TimestampZoned, List, Set, Map, Ref, Json, Xml, Enum { key: String }, Struct { key: String }, Object { key: String, fields: Vec<String> }, Intersection { key: String, types: Vec<FieldType> }, Union { key: String, types: Vec<FieldType> }, Method { params: Vec<String>, ret: Box<FieldType> } } impl FromStr for FieldType { type Err = (); fn from_str(s: &str) -> Result<FieldType, ()> { match s { "Unit" => Ok(FieldType::Unit), "String" => Ok(FieldType::String), "EncryptedString" => Ok(FieldType::EncryptedString), "Nothing" => Ok(FieldType::Nothing), "Any" => Ok(FieldType::Any), "Boolean" => Ok(FieldType::Boolean), "Byte" => Ok(FieldType::Byte), "Short" => Ok(FieldType::Short), "Integer" => Ok(FieldType::Integer), "Long" => Ok(FieldType::Long), "Float" => Ok(FieldType::Float), "Double" => Ok(FieldType::Double), "BigDecimal" => Ok(FieldType::BigDecimal), "ByteArray" => Ok(FieldType::ByteArray), "Uuid" => Ok(FieldType::Uuid), "Date" => Ok(FieldType::Date), "Time" => Ok(FieldType::Time), "Timestamp" => Ok(FieldType::Timestamp), "TimestampZoned" => Ok(FieldType::TimestampZoned), "List" => Ok(FieldType::List), "Set" => Ok(FieldType::Set), "Map" => Ok(FieldType::Map), "Ref" => Ok(FieldType::Ref), "Json" => Ok(FieldType::Json), "Xml" => Ok(FieldType::Xml), "Enum" => Ok(FieldType::Enum { key: "TODO".to_string() }), "Struct" => Ok(FieldType::Struct { key: "TODO".to_string() }), "Object" => Ok(FieldType::Object { key: "TODO".to_string(), fields: Vec::new() }), "Intersection" => Ok(FieldType::Intersection { key: "TODO".to_string(), types: Vec::new() }), "Union" => Ok(FieldType::Union { key: "TODO".to_string(), types: Vec::new() }), "Method" => Ok(FieldType::Method { params: Vec::new(), ret: Box::new(FieldType::Any) }), _ => Err(()) } } }