Diffstat (limited to 'src/build/builders/core/struct.rs')
-rw-r--r--src/build/builders/core/struct.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/build/builders/core/struct.rs b/src/build/builders/core/struct.rs
index e9abc9c..555314d 100644
--- a/src/build/builders/core/struct.rs
+++ b/src/build/builders/core/struct.rs
@@ -211,6 +211,7 @@ where
Dynamic<Info::T>: DynBind<E>,
Info: StructTypeInfo<'ctx, Mode, E>,
Dynamic<OwnedStatic<usize>>: DynBind<E>,
+ Dynamic<OwnedStatic<String>>: DynBind<E>,
for<'a> Dynamic<&'a Info::T>: DynBind<E>,
for<'b, 'c> Dynamic<TypeName::T<'b, 'c, Info::ValueT, E>>: DynBind<E>,
Dynamic<OwnedStatic<&'static str>>: DynBind<E>,
@@ -262,6 +263,7 @@ where
Dynamic<OwnedStatic<&'static str>>: DynBind<E>,
for<'a> Dynamic<&'a Info::T>: DynBind<E>,
Dynamic<OwnedStatic<usize>>: DynBind<E>,
+ Dynamic<OwnedStatic<String>>: DynBind<E>,
for<'b, 'c> Dynamic<TypeName::T<'b, 'c, Info::ValueT, E>>: DynBind<E>,
for<'b> Dynamic<TempBorrowedStatic<'b, str>>: DynBind<E>,
for<'b, 'c> Dynamic<&'b TypeName::T<'b, 'c, Info::ValueT, E>>: DynBind<E>,
@@ -288,6 +290,7 @@ any_trait! {
Info: StructTypeInfo<'ctx, Mode, E>,
Dynamic<Info::T>: DynBind<E>,
Dynamic<OwnedStatic<&'static str>>: DynBind<E>,
+ Dynamic<OwnedStatic<String>>: DynBind<E>,
for<'b, 'c> Dynamic<TypeName::T<'b, 'c, Info::ValueT, E>>: DynBind<E>,
for<'b, 'c> Dynamic<&'b TypeName::T<'b, 'c, Info::ValueT, E>>: DynBind<E>,
for<'b> Dynamic<TempBorrowedStatic<'b, str>>: DynBind<E>,
@@ -307,6 +310,7 @@ where
Dynamic<OwnedStatic<usize>>: DynBind<E>,
for<'b> Dynamic<TempBorrowedStatic<'b, str>>: DynBind<E>,
Dynamic<OwnedStatic<&'static str>>: DynBind<E>,
+ Dynamic<OwnedStatic<String>>: DynBind<E>,
E: Environment,
{
#[inline(always)]
@@ -463,6 +467,7 @@ where
Info: StructTypeInfo<'ctx, Mode, E>,
for<'b> Dynamic<TempBorrowedStatic<'b, str>>: DynBind<E>,
Dynamic<OwnedStatic<&'static str>>: DynBind<E>,
+ Dynamic<OwnedStatic<String>>: DynBind<E>,
Dynamic<OwnedStatic<usize>>: DynBind<E>,
E: Environment,
{
@@ -571,6 +576,7 @@ any_trait! {
I: StructTypeInfo<'ctx, M, E>,
Dynamic<OwnedStatic<usize>>: DynBind<E>,
Dynamic<OwnedStatic<&'static str>>: DynBind<E>,
+ Dynamic<OwnedStatic<String>>: DynBind<E>,
for<'b> Dynamic<TempBorrowedStatic<'b, str>>: DynBind<E>,
}
@@ -580,6 +586,7 @@ where
I: StructTypeInfo<'ctx, M, E>,
Dynamic<OwnedStatic<usize>>: DynBind<E>,
Dynamic<OwnedStatic<&'static str>>: DynBind<E>,
+ Dynamic<OwnedStatic<String>>: DynBind<E>,
for<'a> Dynamic<TempBorrowedStatic<'a, str>>: DynBind<E>,
{
fn visit<'a: 'c, 'b: 'c, 'c>(
@@ -615,11 +622,13 @@ any_trait! {
ValueProto<OwnedStatic<usize>, E>,
ValueProto<TempBorrowedStaticHrt<str>, E>,
ValueProto<OwnedStatic<&'static str>, E>,
+ ValueProto<OwnedStatic<String>, E>,
] where
E: Environment,
I: StructTypeInfo<'ctx, M, E>,
Dynamic<OwnedStatic<usize>>: DynBind<E>,
Dynamic<OwnedStatic<&'static str>>: DynBind<E>,
+ Dynamic<OwnedStatic<String>>: DynBind<E>,
for<'a> Dynamic<TempBorrowedStatic<'a, str>>: DynBind<E>,
}
@@ -682,3 +691,23 @@ where
E::value(VisitResult::Control(Flow::Done)).cast()
}
}
+
+impl<'ctx, I, M, E> Value<'ctx, OwnedStatic<String>, E> for NameVisitor<'ctx, I, M, E>
+where
+ E: Environment,
+ I: StructTypeInfo<'ctx, M, E>,
+ Dynamic<OwnedStatic<String>>: DynBind<E>,
+{
+ fn visit<'a>(
+ &'a mut self,
+ OwnedStatic(name): TypeName::T<'a, 'ctx, OwnedStatic<String>, E>,
+ ) -> NativeForm<'a, VisitResult<Dynamic<TypeName::T<'a, 'ctx, OwnedStatic<String>, E>>>, E>
+ where
+ TypeName::T<'a, 'ctx, TempBorrowedStaticHrt<str>, E>: Sized,
+ 'ctx: 'a,
+ {
+ self.field_marker = I::marker_from_name(&name);
+
+ E::value(VisitResult::Control(Flow::Done)).cast()
+ }
+}