diff --git a/src/lib.rs b/src/lib.rs index 545bc13..c471ee7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -22,34 +22,55 @@ use internal::{ /// The primary trait exposed by this crate. Implement this trait if you would /// like to be able to render a type in a template. +/// +/// NOTE: There are defaults implemented for every method on this trait: +/// - print: prints nothing +/// - lookup: always returns None +/// - has: always returns None +/// - is_truthy: always returns true +/// - index: always returns None +/// +/// You only need to implement the methods whose behaviors you want to change pub trait Value: core::fmt::Debug { /// Print this value to the given string. /// /// See also [`internal::parse::Print`] and [`internal::vm::ops::Op::ValuePrint`] - fn print(&self, out: &mut String); + fn print(&self, out: &mut String) { + let _ = out; + } /// Lookup a field name in this value. The returned [`Value`] will be set as /// the current value inside the block. /// /// See also [internal::vm::ops::Op::ValueLookup] - fn lookup(&self, name: &str) -> Option<&dyn Value>; + fn lookup(&self, name: &str) -> Option<&dyn Value> { + let _ = name; + None + } /// Like [`Option::map`], but for a value. The returned [`Value`] will be set /// as the current value inside the block. /// /// See also [`internal::parse::Has`] and [`internal::vm::ops::Op::ValueHas`] - fn has(&self) -> Option<&dyn Value>; + fn has(&self) -> Option<&dyn Value> { + None + } /// Check if a value is truthy. /// /// See also [`internal::parse::If`] and [`internal::vm::ops::Op::ValueTruthy`] - fn is_truthy(&self) -> bool; + fn is_truthy(&self) -> bool { + true + } /// Lookup the current index in this value. The returned [`Value`] will be /// set as the current value inside the block. /// /// See also [`internal::parse::For`] and [`internal::vm::ops::Op::ValueIndex`] - fn index(&self, index: usize) -> Option<&dyn Value>; + fn index(&self, index: usize) -> Option<&dyn Value> { + let _ = index; + None + } } macro_rules! value_for_int {