public static bool IsReturn <T>(this IInterpetedResult <T> self, out IInterpetedAnyType returned, out T value) where T : IInterpetedAnyType { if (self is IInterpetedResultNotReturn <T> && self is IInterpetedResultReturn <T> ) { throw new Exception("should not be both!"); } returned = default; value = default; if (self is IInterpetedResultNotReturn <T> notReturn) { value = notReturn.Value; return(false); } if (self is IInterpetedResultReturn <T> toReturn) { returned = toReturn.Value; return(true); } throw new Exception("should be one!"); }
public InterpetedMember(IVerifiableType verifiableType, IInterpetedAnyType value, IRunTimeAnyRoot root) : base(root) { if (value == null) { throw new ArgumentNullException(nameof(value)); } Value = value; this.VerifiableType = verifiableType ?? throw new ArgumentNullException(nameof(verifiableType)); }
public bool TrySet(IInterpetedAnyType o) { // having to find TransformerExtensions.NewConversionContext is cognative load // and I always use TransformerExtensions.NewConversionContext // what even is the point of passing it var incommingType = o.Convert(TransformerExtensions.NewConversionContext()); // also don't like passing in false here // forces me to know too much about that is going on under the hood if (VerifiableType.TheyAreUs(incommingType, false)) { Set(o.Cast <T>()); return(true); } return(false); }
public RunTimeAnyRootEntry(IInterpetedAnyType interpetedType, IVerifiableType compileTimeType) { InterpetedType = interpetedType ?? throw new ArgumentNullException(nameof(interpetedType)); CompileTimeType = compileTimeType ?? throw new ArgumentNullException(nameof(compileTimeType)); }
public static IInterpetedResultReturn <T> Return <T>(IInterpetedAnyType value) where T : IInterpetedAnyType { return(new IsReturn <T>(value)); }
public IsReturn(IInterpetedAnyType value) { Value = value ?? throw new ArgumentNullException(nameof(value)); }
public static IInterpetedMember <IInterpetedAnyType> AnyMember(IInterpetedAnyType t) => Member(new AnyType(), t);
public static Func <IRunTimeAnyRoot, RunTimeAnyRootEntry> MemberIntention(IVerifiableType type, IInterpetedAnyType t) // TODO check that IVerifiableType is T => root => new RunTimeAnyRootEntry(new InterpetedMember(type, t, root), type);
public static IInterpetedMember Member(IVerifiableType type, IInterpetedAnyType t) => Root(new Func <IRunTimeAnyRoot, RunTimeAnyRootEntry>[] { MemberIntention(type, t) }).Has <IInterpetedMember>();
public void Set(IInterpetedAnyType o) { Value = o; }