Add defaults for Value
This commit is contained in:
parent
c61c2dba37
commit
417e36e75b
31
src/lib.rs
31
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 {
|
||||
|
|
|
|||
Loading…
Reference in a new issue