Mercurial > core / rust/lib/sxp/src/lib.rs
changeset 698: |
96958d3eb5b0 |
parent: |
0ccbbd142694
|
author: |
Richard Westhaver <ellis@rwest.io> |
date: |
Fri, 04 Oct 2024 22:04:59 -0400 |
permissions: |
-rw-r--r-- |
description: |
fixes |
1 //! lib.rs --- S-eXPressions. 2 #![cfg_attr(not(feature = "std"), no_std)] 7 pub use err::{Error, Result}; 14 core::result::Result::Ok(val) => val, 15 core::result::Result::Err(err) => return core::result::Result::Err(err), 21 // pub use crate::de::{ 22 // from_reader, from_slice, from_str, from_traits, Deserializer, 27 pub use fmt::{DefaultFormatter, Formatter, ReadFormatter, WriteFormatter}; 37 pub use macs::{Macro, MacroObject, ReadTable, WriteTable}; 39 pub use ser::{to_string, to_vec, to_writer, Serializer}; 43 #[macro_export(local_inner_macros)] 50 // may not be necessary 51 #[macro_export(local_inner_macros)] 54 (@array [$($elems:expr),*]) => { 57 // Next element is `nil`. 58 (@array [$($elems:expr,)*] nil $($rest:tt)*) => { 59 _sxp!(@array [$($elems,)* _sxp!(nil)] $($rest)*) 61 // Unexpected token after most recent element. 62 (@array [$($elems:expr),*] $unexpected:tt $($rest:tt)*) => { 63 sxp_unexpected!($unexpected) 66 ////////////////////////////////////////////////////////////////////////// 67 // TT muncher for parsing the inside of a object (:foo "bar"). Each entry is 68 // inserted into the given map variable. 70 // Must be invoked as: _sxp!(@object $map () ($($tt)*) ($($tt)*)) 72 // We require two copies of the input tokens so that we can match on one 73 // copy and trigger errors on the other copy. 74 ////////////////////////////////////////////////////////////////////////// 77 (@object $object:ident () () ()) => {}; 79 // Insert the current entry. 80 (@object $object:ident ( [$($key:tt)+] ($value:expr) ) $($rest:tt)*) => { 81 let _ = $object.insert(($($key)+).into(), $value); 82 _sxp!(@object $object () ($($rest)*) ($($rest)*)); 85 // Current entry followed by unexpected token. 86 (@object $object:ident [$($key:tt)+] ($value:expr) $unexpected:tt $($rest:tt)*) => { 87 sxp_unexpected!($unexpected); 90 // Insert the last entry 91 (@object $object:ident [$($key:tt)+] ($value:expr)) => { 92 let _ = $object.insert(($($key)+).into(), $value); 95 // Next value is `nil`. 96 (@object $object:ident ($($key:tt)+) (nil $($rest:tt)*) $copy:tt) => { 97 json_internal!(@object $object [$($key)+] (json_internal!(null)) $($rest)*);