Ejemplo n.º 1
0
        public static Either<string, bool> HasStateTypeOf(Type stateType, Type[] stateTypeInterfaces)
        {
            if (stateType == null) throw new ArgumentNullException(nameof(stateType));

            var stateTypeInfo = stateType.GetTypeInfo();

            var res = stateTypeInterfaces == null || stateTypeInterfaces.Length == 0
                ? Left<string, bool>("No public interfaces")
                : Right<string, bool>(stateTypeInterfaces.Filter(notnull).Map(t => t.GetTypeInfo()).Fold(false, (value, type) =>
                    value
                        ? true
                        : type.IsAssignableFrom(stateTypeInfo)));

            if(res.IsRight && res.Lift())
            {
                return res;
            }
            else
            {
                return Left<string, bool>("State-type (" + stateType.FullName + ") doesn't match inbox declared interfaces: " + String.Join(", ", stateTypeInterfaces.Map(x => x.FullName)));
            }
        }
Ejemplo n.º 2
0
        public static Either<string, bool> IsMessageValidForProcess(Type messageType, Type[] inboxDeclaredType)
        {
            if (messageType == null)
            {
                return Left<string, bool>("Message invalid (null)");
            }
            var messageTypeInfo = messageType.GetTypeInfo();

            if (typeof(TerminatedMessage).GetTypeInfo().IsAssignableFrom(messageTypeInfo) ||
                typeof(UserControlMessage).GetTypeInfo().IsAssignableFrom(messageTypeInfo) ||
                typeof(SystemMessage).GetTypeInfo().IsAssignableFrom(messageTypeInfo) ||
                typeof(RelayMsg).GetTypeInfo().IsAssignableFrom(messageTypeInfo))
            {
                return Right<string, bool>(true);
            }

            return inboxDeclaredType == null || inboxDeclaredType.Length == 0
                ? Left<string, bool>("No declared types")
                : Right<string, bool>(inboxDeclaredType.Filter(notnull).Map(t => t.GetTypeInfo()).Fold(false, (value, type) =>
                    value
                        ? true
                        : type.IsAssignableFrom(messageTypeInfo)));
        }