templater: unify property conversion traits

We could define separate traits for conversion "from" and "to", but there aren't
many users who benefit from precise trait bounds.
This commit is contained in:
Yuya Nishihara 2025-04-30 19:42:23 +09:00
parent 780f9e547d
commit 8936a7bc4b
4 changed files with 5 additions and 16 deletions

View File

@ -80,7 +80,6 @@ use crate::template_builder::BuildContext;
use crate::template_builder::CoreTemplateBuildFnTable; use crate::template_builder::CoreTemplateBuildFnTable;
use crate::template_builder::CoreTemplatePropertyKind; use crate::template_builder::CoreTemplatePropertyKind;
use crate::template_builder::CoreTemplatePropertyVar; use crate::template_builder::CoreTemplatePropertyVar;
use crate::template_builder::IntoTemplateProperty;
use crate::template_builder::TemplateBuildMethodFnMap; use crate::template_builder::TemplateBuildMethodFnMap;
use crate::template_builder::TemplateLanguage; use crate::template_builder::TemplateLanguage;
use crate::template_parser; use crate::template_parser;
@ -411,9 +410,7 @@ impl<'repo> CommitTemplatePropertyKind<'repo> {
impl<'repo> CoreTemplatePropertyVar<'repo> for CommitTemplatePropertyKind<'repo> { impl<'repo> CoreTemplatePropertyVar<'repo> for CommitTemplatePropertyKind<'repo> {
template_builder::impl_core_wrap_property_fns!('repo, CommitTemplatePropertyKind::Core); template_builder::impl_core_wrap_property_fns!('repo, CommitTemplatePropertyKind::Core);
}
impl<'repo> IntoTemplateProperty<'repo> for CommitTemplatePropertyKind<'repo> {
fn type_name(&self) -> &'static str { fn type_name(&self) -> &'static str {
match self { match self {
CommitTemplatePropertyKind::Core(property) => property.type_name(), CommitTemplatePropertyKind::Core(property) => property.type_name(),

View File

@ -22,7 +22,6 @@ use crate::template_builder::BuildContext;
use crate::template_builder::CoreTemplateBuildFnTable; use crate::template_builder::CoreTemplateBuildFnTable;
use crate::template_builder::CoreTemplatePropertyKind; use crate::template_builder::CoreTemplatePropertyKind;
use crate::template_builder::CoreTemplatePropertyVar; use crate::template_builder::CoreTemplatePropertyVar;
use crate::template_builder::IntoTemplateProperty;
use crate::template_builder::TemplateLanguage; use crate::template_builder::TemplateLanguage;
use crate::template_parser; use crate::template_parser;
use crate::template_parser::FunctionCallNode; use crate::template_parser::FunctionCallNode;
@ -142,9 +141,7 @@ impl<'a, C> GenericTemplatePropertyKind<'a, C> {
impl<'a, C> CoreTemplatePropertyVar<'a> for GenericTemplatePropertyKind<'a, C> { impl<'a, C> CoreTemplatePropertyVar<'a> for GenericTemplatePropertyKind<'a, C> {
template_builder::impl_core_wrap_property_fns!('a, GenericTemplatePropertyKind::Core); template_builder::impl_core_wrap_property_fns!('a, GenericTemplatePropertyKind::Core);
}
impl<'a, C> IntoTemplateProperty<'a> for GenericTemplatePropertyKind<'a, C> {
fn type_name(&self) -> &'static str { fn type_name(&self) -> &'static str {
match self { match self {
GenericTemplatePropertyKind::Core(property) => property.type_name(), GenericTemplatePropertyKind::Core(property) => property.type_name(),

View File

@ -31,7 +31,6 @@ use crate::template_builder::BuildContext;
use crate::template_builder::CoreTemplateBuildFnTable; use crate::template_builder::CoreTemplateBuildFnTable;
use crate::template_builder::CoreTemplatePropertyKind; use crate::template_builder::CoreTemplatePropertyKind;
use crate::template_builder::CoreTemplatePropertyVar; use crate::template_builder::CoreTemplatePropertyVar;
use crate::template_builder::IntoTemplateProperty;
use crate::template_builder::TemplateBuildMethodFnMap; use crate::template_builder::TemplateBuildMethodFnMap;
use crate::template_builder::TemplateLanguage; use crate::template_builder::TemplateLanguage;
use crate::template_parser; use crate::template_parser;
@ -151,9 +150,7 @@ impl OperationTemplatePropertyKind {
impl CoreTemplatePropertyVar<'static> for OperationTemplatePropertyKind { impl CoreTemplatePropertyVar<'static> for OperationTemplatePropertyKind {
template_builder::impl_core_wrap_property_fns!('static, OperationTemplatePropertyKind::Core); template_builder::impl_core_wrap_property_fns!('static, OperationTemplatePropertyKind::Core);
}
impl IntoTemplateProperty<'static> for OperationTemplatePropertyKind {
fn type_name(&self) -> &'static str { fn type_name(&self) -> &'static str {
match self { match self {
OperationTemplatePropertyKind::Core(property) => property.type_name(), OperationTemplatePropertyKind::Core(property) => property.type_name(),

View File

@ -68,7 +68,7 @@ use crate::time_util;
/// Callbacks to build language-specific evaluation objects from AST nodes. /// Callbacks to build language-specific evaluation objects from AST nodes.
pub trait TemplateLanguage<'a> { pub trait TemplateLanguage<'a> {
type Property: CoreTemplatePropertyVar<'a> + IntoTemplateProperty<'a>; type Property: CoreTemplatePropertyVar<'a>;
fn settings(&self) -> &UserSettings; fn settings(&self) -> &UserSettings;
@ -169,11 +169,7 @@ pub trait CoreTemplatePropertyVar<'a> {
fn wrap_template(template: Box<dyn Template + 'a>) -> Self; fn wrap_template(template: Box<dyn Template + 'a>) -> Self;
fn wrap_list_template(template: Box<dyn ListTemplate + 'a>) -> Self; fn wrap_list_template(template: Box<dyn ListTemplate + 'a>) -> Self;
}
/// Provides access to basic template property types.
// TODO: merge with CoreTemplatePropertyVar<'a>?
pub trait IntoTemplateProperty<'a> {
/// Type name of the property output. /// Type name of the property output.
fn type_name(&self) -> &'static str; fn type_name(&self) -> &'static str;
@ -217,7 +213,9 @@ pub enum CoreTemplatePropertyKind<'a> {
ListTemplate(Box<dyn ListTemplate + 'a>), ListTemplate(Box<dyn ListTemplate + 'a>),
} }
impl<'a> IntoTemplateProperty<'a> for CoreTemplatePropertyKind<'a> { impl<'a> CoreTemplatePropertyVar<'a> for CoreTemplatePropertyKind<'a> {
impl_core_wrap_property_fns!('a);
fn type_name(&self) -> &'static str { fn type_name(&self) -> &'static str {
match self { match self {
CoreTemplatePropertyKind::String(_) => "String", CoreTemplatePropertyKind::String(_) => "String",
@ -591,7 +589,7 @@ impl<P> Expression<P> {
} }
} }
impl<'a, P: IntoTemplateProperty<'a>> Expression<P> { impl<'a, P: CoreTemplatePropertyVar<'a>> Expression<P> {
pub fn type_name(&self) -> &'static str { pub fn type_name(&self) -> &'static str {
self.property.type_name() self.property.type_name()
} }