rust/hedgewars-server/src/server/haskell.rs
changeset 15576 3be9c98ae190
parent 15575 a2e78f5907cc
child 15577 7d4f552e317f
equal deleted inserted replaced
15575:a2e78f5907cc 15576:3be9c98ae190
    28         name: String,
    28         name: String,
    29         fields: HashMap<String, HaskellValue>,
    29         fields: HashMap<String, HaskellValue>,
    30     },
    30     },
    31 }
    31 }
    32 
    32 
       
    33 impl HaskellValue {
       
    34     pub fn to_number(&self) -> Option<u8> {
       
    35         match self {
       
    36             HaskellValue::Number(value) => Some(*value),
       
    37             _ => None,
       
    38         }
       
    39     }
       
    40 
       
    41     pub fn into_number(self) -> Option<u8> {
       
    42         match self {
       
    43             HaskellValue::Number(value) => Some(value),
       
    44             _ => None,
       
    45         }
       
    46     }
       
    47 
       
    48     pub fn to_string(&self) -> Option<&str> {
       
    49         match self {
       
    50             HaskellValue::String(value) => Some(value),
       
    51             _ => None,
       
    52         }
       
    53     }
       
    54 
       
    55     pub fn into_string(self) -> Option<String> {
       
    56         match self {
       
    57             HaskellValue::String(value) => Some(value),
       
    58             _ => None,
       
    59         }
       
    60     }
       
    61 
       
    62     pub fn into_list(self) -> Option<Vec<HaskellValue>> {
       
    63         match self {
       
    64             HaskellValue::List(items) => Some(items),
       
    65             _ => None,
       
    66         }
       
    67     }
       
    68 
       
    69     pub fn into_tuple(self) -> Option<Vec<HaskellValue>> {
       
    70         match self {
       
    71             HaskellValue::Tuple(items) => Some(items),
       
    72             _ => None,
       
    73         }
       
    74     }
       
    75 
       
    76     pub fn into_anon_struct(self) -> Option<(String, Vec<HaskellValue>)> {
       
    77         match self {
       
    78             HaskellValue::AnonStruct { name, fields } => Some((name, fields)),
       
    79             _ => None,
       
    80         }
       
    81     }
       
    82 
       
    83     pub fn into_struct(self) -> Option<(String, HashMap<String, HaskellValue>)> {
       
    84         match self {
       
    85             HaskellValue::Struct { name, fields } => Some((name, fields)),
       
    86             _ => None,
       
    87         }
       
    88     }
       
    89 }
       
    90 
    33 fn write_sequence(
    91 fn write_sequence(
    34     f: &mut Formatter<'_>,
    92     f: &mut Formatter<'_>,
    35     brackets: &[u8; 2],
    93     brackets: &[u8; 2],
    36     mut items: std::slice::Iter<HaskellValue>,
    94     mut items: std::slice::Iter<HaskellValue>,
    37 ) -> Result<(), Error> {
    95 ) -> Result<(), Error> {
    38     write!(f, "{}", brackets[0] as char)?;
    96     write!(f, "{}", brackets[0] as char)?;
    39     while let Some(value) = items.next() {
    97     while let Some(value) = items.next() {
    40         write!(f, "{}", value);
    98         write!(f, "{}", value)?;
    41         if !items.as_slice().is_empty() {
    99         if !items.as_slice().is_empty() {
    42             write!(f, ", ")?;
   100             write!(f, ", ")?;
    43         }
   101         }
    44     }
   102     }
    45     if brackets[1] != b'\0' {
   103     if brackets[1] != b'\0' {