mirror of
https://github.com/martinvonz/jj.git
synced 2025-05-05 15:32:49 +00:00
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:
parent
780f9e547d
commit
8936a7bc4b
@ -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(),
|
||||
|
@ -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(),
|
||||
|
@ -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(),
|
||||
|
@ -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<dyn Template + '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.
|
||||
fn type_name(&self) -> &'static str;
|
||||
|
||||
@ -217,7 +213,9 @@ pub enum CoreTemplatePropertyKind<'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 {
|
||||
match self {
|
||||
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 {
|
||||
self.property.type_name()
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user