File: serialize.rs

package info (click to toggle)
rust-serde-path-to-error 0.1.17-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 208 kB
  • sloc: makefile: 2
file content (52 lines) | stat: -rw-r--r-- 1,214 bytes parent folder | download
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
use serde::Serialize;
use serde_derive::Serialize;
use std::cell::RefCell;
use std::collections::BTreeMap;
use std::fmt::Debug;

fn test<T>(value: &T, expected: &str)
where
    T: ?Sized + Serialize + Debug,
{
    let mut out = Vec::new();
    let ser = &mut serde_json::Serializer::new(&mut out);
    let result = serde_path_to_error::serialize(value, ser);
    let path = result.unwrap_err().path().to_string();
    assert_eq!(path, expected);
}

#[test]
fn test_refcell_already_borrowed() {
    #[derive(Serialize, Debug)]
    struct Outer<'a> {
        k: Inner<'a>,
    }

    #[derive(Serialize, Debug)]
    struct Inner<'a> {
        refcell: &'a RefCell<String>,
    }

    let refcell = RefCell::new(String::new());
    let outer = Outer {
        k: Inner { refcell: &refcell },
    };

    let _borrowed = refcell.borrow_mut();
    test(&outer, "k.refcell");
}

#[test]
fn test_map_nonstring_key() {
    fn singleton_map<K: Ord, V>(key: K, value: V) -> BTreeMap<K, V> {
        let mut map = BTreeMap::new();
        map.insert(key, value);
        map
    }

    let map = singleton_map(b"", 0);
    let map = singleton_map("k", map);
    let map = singleton_map(100, map);

    test(&map, "100.k");
}