chore(core/rust): Add int variant to tracing

pull/1961/head
Jan Pochyla 3 years ago committed by matejcik
parent 5b0686f09a
commit baffe8fdf3

@ -1,5 +1,6 @@
/// Visitor passed into `Trace` types. /// Visitor passed into `Trace` types.
pub trait Tracer { pub trait Tracer {
fn int(&mut self, i: i64);
fn bytes(&mut self, b: &[u8]); fn bytes(&mut self, b: &[u8]);
fn string(&mut self, s: &str); fn string(&mut self, s: &str);
fn symbol(&mut self, name: &str); fn symbol(&mut self, name: &str);
@ -25,6 +26,12 @@ impl Trace for &str {
} }
} }
impl Trace for usize {
fn trace(&self, t: &mut dyn Tracer) {
t.int(*self as i64);
}
}
impl<T> Trace for Option<T> impl<T> Trace for Option<T>
where where
T: Trace, T: Trace,

@ -169,6 +169,10 @@ impl LayoutObj {
struct CallbackTracer(Obj); struct CallbackTracer(Obj);
impl Tracer for CallbackTracer { impl Tracer for CallbackTracer {
fn int(&mut self, i: i64) {
self.0.call_with_n_args(&[i.try_into().unwrap()]).unwrap();
}
fn bytes(&mut self, b: &[u8]) { fn bytes(&mut self, b: &[u8]) {
self.0.call_with_n_args(&[b.try_into().unwrap()]).unwrap(); self.0.call_with_n_args(&[b.try_into().unwrap()]).unwrap();
} }

@ -84,6 +84,10 @@ mod tests {
use super::*; use super::*;
impl Tracer for Vec<u8> { impl Tracer for Vec<u8> {
fn int(&mut self, i: i64) {
self.string(&i.to_string());
}
fn bytes(&mut self, b: &[u8]) { fn bytes(&mut self, b: &[u8]) {
self.extend(b) self.extend(b)
} }

@ -59,6 +59,10 @@ mod tests {
use super::*; use super::*;
impl Tracer for Vec<u8> { impl Tracer for Vec<u8> {
fn int(&mut self, i: i64) {
self.string(&i.to_string());
}
fn bytes(&mut self, b: &[u8]) { fn bytes(&mut self, b: &[u8]) {
self.extend(b) self.extend(b)
} }

Loading…
Cancel
Save