1 // Test support for inspecting Values 2 3 use std::fmt; 4 use std::str; 5 6 use super::internal; 7 use super::{Error, Value}; 8 9 #[derive(Debug, PartialEq)] 10 pub(in kv) enum Token { 11 U64(u64), 12 I64(i64), 13 F64(f64), 14 Char(char), 15 Bool(bool), 16 Str(String), 17 None, 18 19 #[cfg(feature = "kv_unstable_sval")] 20 Sval, 21 } 22 23 #[cfg(test)] 24 impl<'v> Value<'v> { to_token(&self) -> Token25 pub(in kv) fn to_token(&self) -> Token { 26 struct TestVisitor(Option<Token>); 27 28 impl<'v> internal::Visitor<'v> for TestVisitor { 29 fn debug(&mut self, v: &dyn fmt::Debug) -> Result<(), Error> { 30 self.0 = Some(Token::Str(format!("{:?}", v))); 31 Ok(()) 32 } 33 34 fn u64(&mut self, v: u64) -> Result<(), Error> { 35 self.0 = Some(Token::U64(v)); 36 Ok(()) 37 } 38 39 fn i64(&mut self, v: i64) -> Result<(), Error> { 40 self.0 = Some(Token::I64(v)); 41 Ok(()) 42 } 43 44 fn f64(&mut self, v: f64) -> Result<(), Error> { 45 self.0 = Some(Token::F64(v)); 46 Ok(()) 47 } 48 49 fn bool(&mut self, v: bool) -> Result<(), Error> { 50 self.0 = Some(Token::Bool(v)); 51 Ok(()) 52 } 53 54 fn char(&mut self, v: char) -> Result<(), Error> { 55 self.0 = Some(Token::Char(v)); 56 Ok(()) 57 } 58 59 fn str(&mut self, v: &str) -> Result<(), Error> { 60 self.0 = Some(Token::Str(v.into())); 61 Ok(()) 62 } 63 64 fn none(&mut self) -> Result<(), Error> { 65 self.0 = Some(Token::None); 66 Ok(()) 67 } 68 69 #[cfg(feature = "kv_unstable_sval")] 70 fn sval(&mut self, _: &dyn internal::sval::Value) -> Result<(), Error> { 71 self.0 = Some(Token::Sval); 72 Ok(()) 73 } 74 } 75 76 let mut visitor = TestVisitor(None); 77 self.visit(&mut visitor).unwrap(); 78 79 visitor.0.unwrap() 80 } 81 } 82