示例#1
0
 internal EdmTypeVisitor(EdmTypeFactory typeFactory)
 {
     this.typeFactory = typeFactory;
 }
        public static EdmComplexType BuildEdmType(this Schema schema, bool withHidden, PartitionResolver partitionResolver, EdmTypeFactory typeFactory)
        {
            Guard.NotNull(typeFactory, nameof(typeFactory));
            Guard.NotNull(partitionResolver, nameof(partitionResolver));

            var(edmType, _) = typeFactory("Data");

            var visitor = new EdmTypeVisitor(typeFactory);

            foreach (var field in schema.FieldsByName.Values)
            {
                if (!field.IsForApi(withHidden))
                {
                    continue;
                }

                var fieldEdmType = field.Accept(visitor);

                if (fieldEdmType == null)
                {
                    continue;
                }

                var(partitionType, created) = typeFactory($"Data.{field.Name.ToPascalCase()}");

                if (created)
                {
                    var partitioning = partitionResolver(field.Partitioning);

                    foreach (var partitionKey in partitioning.AllKeys)
                    {
                        partitionType.AddStructuralProperty(partitionKey.EscapeEdmField(), fieldEdmType);
                    }
                }

                edmType.AddStructuralProperty(field.Name.EscapeEdmField(), new EdmComplexTypeReference(partitionType, false));
            }

            return(edmType);
        }
示例#3
0
        public static IEdmTypeReference?BuildType(IField field, EdmTypeFactory factory)
        {
            var args = new Args(factory);

            return(field.Accept(Instance, args));
        }
示例#4
0
 public Args(EdmTypeFactory factory)
 {
     Factory = factory;
 }
示例#5
0
            public Args(EdmTypeFactory factory, int level)
            {
                Factory = factory;

                Level = level;
            }
        public static IEdmTypeReference?BuildType(IField field, EdmTypeFactory factory, ResolvedComponents components)
        {
            var args = new Args(factory, components);

            return(field.Accept(Instance, args));
        }
 public sealed record Args(EdmTypeFactory Factory, ResolvedComponents Components, int Level = 0);