From 8936a7bc4bc69d1ed542f98aad259d26ca6e7c0e Mon Sep 17 00:00:00 2001 From: Yuya Nishihara Date: Wed, 30 Apr 2025 19:42:23 +0900 Subject: [PATCH] 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. --- cli/src/commit_templater.rs | 3 --- cli/src/generic_templater.rs | 3 --- cli/src/operation_templater.rs | 3 --- cli/src/template_builder.rs | 12 +++++------- 4 files changed, 5 insertions(+), 16 deletions(-) diff --git a/cli/src/commit_templater.rs b/cli/src/commit_templater.rs index 23896c96a..5671414b3 100644 --- a/cli/src/commit_templater.rs +++ b/cli/src/commit_templater.rs @@ -80,7 +80,6 @@ use crate::template_builder::BuildContext; use crate::template_builder::CoreTemplateBuildFnTable; use crate::template_builder::CoreTemplatePropertyKind; use crate::template_builder::CoreTemplatePropertyVar; -use crate::template_builder::IntoTemplateProperty; use crate::template_builder::TemplateBuildMethodFnMap; use crate::template_builder::TemplateLanguage; use crate::template_parser; @@ -411,9 +410,7 @@ impl<'repo> CommitTemplatePropertyKind<'repo> { impl<'repo> CoreTemplatePropertyVar<'repo> for CommitTemplatePropertyKind<'repo> { template_builder::impl_core_wrap_property_fns!('repo, CommitTemplatePropertyKind::Core); -} -impl<'repo> IntoTemplateProperty<'repo> for CommitTemplatePropertyKind<'repo> { fn type_name(&self) -> &'static str { match self { CommitTemplatePropertyKind::Core(property) => property.type_name(), diff --git a/cli/src/generic_templater.rs b/cli/src/generic_templater.rs index 843705f18..3766c25a1 100644 --- a/cli/src/generic_templater.rs +++ b/cli/src/generic_templater.rs @@ -22,7 +22,6 @@ use crate::template_builder::BuildContext; use crate::template_builder::CoreTemplateBuildFnTable; use crate::template_builder::CoreTemplatePropertyKind; use crate::template_builder::CoreTemplatePropertyVar; -use crate::template_builder::IntoTemplateProperty; use crate::template_builder::TemplateLanguage; use crate::template_parser; use crate::template_parser::FunctionCallNode; @@ -142,9 +141,7 @@ impl<'a, C> GenericTemplatePropertyKind<'a, C> { impl<'a, C> CoreTemplatePropertyVar<'a> for GenericTemplatePropertyKind<'a, C> { 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 { match self { GenericTemplatePropertyKind::Core(property) => property.type_name(), diff --git a/cli/src/operation_templater.rs b/cli/src/operation_templater.rs index d3cac3930..d2998af40 100644 --- a/cli/src/operation_templater.rs +++ b/cli/src/operation_templater.rs @@ -31,7 +31,6 @@ use crate::template_builder::BuildContext; use crate::template_builder::CoreTemplateBuildFnTable; use crate::template_builder::CoreTemplatePropertyKind; use crate::template_builder::CoreTemplatePropertyVar; -use crate::template_builder::IntoTemplateProperty; use crate::template_builder::TemplateBuildMethodFnMap; use crate::template_builder::TemplateLanguage; use crate::template_parser; @@ -151,9 +150,7 @@ impl OperationTemplatePropertyKind { impl CoreTemplatePropertyVar<'static> for OperationTemplatePropertyKind { template_builder::impl_core_wrap_property_fns!('static, OperationTemplatePropertyKind::Core); -} -impl IntoTemplateProperty<'static> for OperationTemplatePropertyKind { fn type_name(&self) -> &'static str { match self { OperationTemplatePropertyKind::Core(property) => property.type_name(), diff --git a/cli/src/template_builder.rs b/cli/src/template_builder.rs index 64a843586..833676bc1 100644 --- a/cli/src/template_builder.rs +++ b/cli/src/template_builder.rs @@ -68,7 +68,7 @@ use crate::time_util; /// Callbacks to build language-specific evaluation objects from AST nodes. pub trait TemplateLanguage<'a> { - type Property: CoreTemplatePropertyVar<'a> + IntoTemplateProperty<'a>; + type Property: CoreTemplatePropertyVar<'a>; fn settings(&self) -> &UserSettings; @@ -169,11 +169,7 @@ pub trait CoreTemplatePropertyVar<'a> { fn wrap_template(template: Box) -> Self; fn wrap_list_template(template: Box) -> Self; -} -/// Provides access to basic template property types. -// TODO: merge with CoreTemplatePropertyVar<'a>? -pub trait IntoTemplateProperty<'a> { /// Type name of the property output. fn type_name(&self) -> &'static str; @@ -217,7 +213,9 @@ pub enum CoreTemplatePropertyKind<'a> { ListTemplate(Box), } -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 { match self { CoreTemplatePropertyKind::String(_) => "String", @@ -591,7 +589,7 @@ impl

Expression

{ } } -impl<'a, P: IntoTemplateProperty<'a>> Expression

{ +impl<'a, P: CoreTemplatePropertyVar<'a>> Expression

{ pub fn type_name(&self) -> &'static str { self.property.type_name() }