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