protected override IStructure[] CreateStructuresInSerial <T>(T[] items, IStructureSchema structureSchema)
        {
            var structures = new IStructure[items.Length];
            var timeStamp  = SysDateTime.Now;

            for (var i = 0; i < structures.Length; i++)
            {
                var itm         = items[i];
                var structureId = structureSchema.IdAccessor.GetValue(itm);
                if (structureId.IsEmpty)
                {
                    structureId = StructureIdGenerator.Generate(structureSchema);
                    structureSchema.IdAccessor.SetValue(itm, structureId);
                }

                if (structureSchema.HasTimeStamp)
                {
                    structureSchema.TimeStampAccessor.SetValue(itm, timeStamp);
                }

                structures[i] = new Structure(
                    structureSchema.Name,
                    structureId,
                    IndexesFactory.CreateIndexes(structureSchema, itm, structureId),
                    StructureSerializer.Serialize(itm, structureSchema));
            }

            return(structures);
        }
        public override IStructure CreateStructure <T>(T item, IStructureSchema structureSchema)
        {
            var structureId = structureSchema.IdAccessor.GetValue(item);

            if (structureId.IsEmpty)
            {
                structureId = StructureIdGenerator.Generate(structureSchema);
                structureSchema.IdAccessor.SetValue(item, structureId);
            }

            if (structureSchema.HasTimeStamp)
            {
                structureSchema.TimeStampAccessor.SetValue(item, SysDateTime.Now);
            }

            return(new Structure(
                       structureSchema.Name,
                       structureId,
                       IndexesFactory.CreateIndexes(structureSchema, item, structureId),
                       StructureSerializer.Serialize(item, structureSchema)));
        }