Trait TreeAny

Source
pub trait TreeAny: TreeSchema {
    // Required methods
    fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>;
    fn mut_any_by_key(
        &mut self,
        keys: impl Keys,
    ) -> Result<&mut dyn Any, ValueError>;

    // Provided methods
    fn ref_by_key<T: Any>(&self, keys: impl IntoKeys) -> Result<&T, ValueError> { ... }
    fn mut_by_key<T: Any>(
        &mut self,
        keys: impl IntoKeys,
    ) -> Result<&mut T, ValueError> { ... }
}
Expand description

Access any node by keys.

This uses the dyn Any trait object.

use core::any::Any;
use miniconf::{Indices, IntoKeys, JsonPath, TreeAny, TreeSchema};
#[derive(TreeSchema, TreeAny, Default)]
struct S {
    foo: u32,
    bar: [u16; 2],
};
let mut s = S::default();

for key in S::SCHEMA.nodes::<Indices<[_; 2]>, 2>() {
    let a = s.ref_any_by_key(key.unwrap().into_keys()).unwrap();
    assert!([0u32.type_id(), 0u16.type_id()].contains(&(&*a).type_id()));
}

let val: &mut u16 = s.mut_by_key(&JsonPath(".bar[1]")).unwrap();
*val = 3;
assert_eq!(s.bar[1], 3);

let val: &u16 = s.ref_by_key(&JsonPath(".bar[1]")).unwrap();
assert_eq!(*val, 3);

Required Methods§

Source

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Obtain a reference to a dyn Any trait object for a leaf node.

Source

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Obtain a mutable reference to a dyn Any trait object for a leaf node.

Provided Methods§

Source

fn ref_by_key<T: Any>(&self, keys: impl IntoKeys) -> Result<&T, ValueError>

Obtain a reference to a leaf of known type by key.

Source

fn mut_by_key<T: Any>( &mut self, keys: impl IntoKeys, ) -> Result<&mut T, ValueError>

Obtain a mutable reference to a leaf of known type by key.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl TreeAny for SocketAddr

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl TreeAny for bool

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl TreeAny for char

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl TreeAny for f32

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl TreeAny for f64

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl TreeAny for i8

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl TreeAny for i16

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl TreeAny for i32

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl TreeAny for i64

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl TreeAny for i128

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl TreeAny for isize

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl TreeAny for u8

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl TreeAny for u16

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl TreeAny for u32

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl TreeAny for u64

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl TreeAny for u128

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl TreeAny for ()

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl TreeAny for usize

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl TreeAny for SocketAddrV4

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl TreeAny for SocketAddrV6

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl TreeAny for Duration

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl<T0: TreeAny> TreeAny for (T0,)

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl<T0: TreeAny, T1: TreeAny> TreeAny for (T0, T1)

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl<T0: TreeAny, T1: TreeAny, T2: TreeAny> TreeAny for (T0, T1, T2)

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl<T0: TreeAny, T1: TreeAny, T2: TreeAny, T3: TreeAny> TreeAny for (T0, T1, T2, T3)

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl<T0: TreeAny, T1: TreeAny, T2: TreeAny, T3: TreeAny, T4: TreeAny> TreeAny for (T0, T1, T2, T3, T4)

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl<T0: TreeAny, T1: TreeAny, T2: TreeAny, T3: TreeAny, T4: TreeAny, T5: TreeAny> TreeAny for (T0, T1, T2, T3, T4, T5)

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl<T0: TreeAny, T1: TreeAny, T2: TreeAny, T3: TreeAny, T4: TreeAny, T5: TreeAny, T6: TreeAny> TreeAny for (T0, T1, T2, T3, T4, T5, T6)

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl<T0: TreeAny, T1: TreeAny, T2: TreeAny, T3: TreeAny, T4: TreeAny, T5: TreeAny, T6: TreeAny, T7: TreeAny> TreeAny for (T0, T1, T2, T3, T4, T5, T6, T7)

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl<T: 'static, const N: usize> TreeAny for Vec<T, N>

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl<T: TreeAny + ?Sized> TreeAny for &mut T

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl<T: TreeAny> TreeAny for Bound<T>

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl<T: TreeAny> TreeAny for Option<T>

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl<T: TreeAny> TreeAny for Cell<T>

Source§

fn ref_any_by_key(&self, _keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl<T: TreeAny> TreeAny for RefCell<T>

Source§

fn ref_any_by_key(&self, _keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl<T: TreeAny> TreeAny for Wrapping<T>

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl<T: TreeAny> TreeAny for Range<T>

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl<T: TreeAny> TreeAny for RangeFrom<T>

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl<T: TreeAny> TreeAny for RangeTo<T>

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl<T: TreeAny, E: TreeAny> TreeAny for Result<T, E>

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl<T: TreeAny, const N: usize> TreeAny for [T; N]

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Source§

impl<const N: usize> TreeAny for String<N>

Source§

fn ref_any_by_key(&self, keys: impl Keys) -> Result<&dyn Any, ValueError>

Source§

fn mut_any_by_key( &mut self, keys: impl Keys, ) -> Result<&mut dyn Any, ValueError>

Implementors§

Source§

impl<T: Any> TreeAny for Leaf<T>