getObjectBoxModel function

ModelDefinition getObjectBoxModel()

Returns the ObjectBox model definition for this project for use with obx.Store.new.

Implementation

obx_int.ModelDefinition getObjectBoxModel() {
  final model = obx_int.ModelInfo(
    entities: _entities,
    lastEntityId: const obx_int.IdUid(2, 1869689020035618977),
    lastIndexId: const obx_int.IdUid(3, 4581199378552730062),
    lastRelationId: const obx_int.IdUid(0, 0),
    lastSequenceId: const obx_int.IdUid(0, 0),
    retiredEntityUids: const [],
    retiredIndexUids: const [],
    retiredPropertyUids: const [2060455086661458674, 9025783653115450628],
    retiredRelationUids: const [],
    modelVersion: 5,
    modelVersionParserMinimum: 5,
    version: 1,
  );

  final bindings = <Type, obx_int.EntityDefinition>{
    Document: obx_int.EntityDefinition<Document>(
      model: _entities[0],
      toOneRelations: (Document object) => [],
      toManyRelations: (Document object) => {
        obx_int.RelInfo<DocumentChunk>.toOneBacklink(
          4,
          object.id,
          (DocumentChunk srcObject) => srcObject.document,
        ): object.chunks,
      },
      getId: (Document object) => object.id,
      setId: (Document object, int id) {
        object.id = id;
      },
      objectToFB: (Document object, fb.Builder fbb) {
        final fileNameOffset = fbb.writeString(object.fileName);
        final filePathOffset = fbb.writeString(object.filePath);
        final fileHashOffset = object.fileHash == null
            ? null
            : fbb.writeString(object.fileHash!);
        fbb.startTable(10);
        fbb.addInt64(0, object.id);
        fbb.addOffset(1, fileNameOffset);
        fbb.addOffset(2, filePathOffset);
        fbb.addInt64(4, object.createdAt.millisecondsSinceEpoch);
        fbb.addInt64(5, object.updatedAt.millisecondsSinceEpoch);
        fbb.addInt64(7, object.fileSize);
        fbb.addOffset(8, fileHashOffset);
        fbb.finish(fbb.endTable());
        return object.id;
      },
      objectFromFB: (obx.Store store, ByteData fbData) {
        final buffer = fb.BufferContext(fbData);
        final rootOffset = buffer.derefObject(0);
        final idParam = const fb.Int64Reader().vTableGet(
          buffer,
          rootOffset,
          4,
          0,
        );
        final fileNameParam = const fb.StringReader(
          asciiOptimization: true,
        ).vTableGet(buffer, rootOffset, 6, '');
        final filePathParam = const fb.StringReader(
          asciiOptimization: true,
        ).vTableGet(buffer, rootOffset, 8, '');
        final createdAtParam = DateTime.fromMillisecondsSinceEpoch(
          const fb.Int64Reader().vTableGet(buffer, rootOffset, 12, 0),
        );
        final updatedAtParam = DateTime.fromMillisecondsSinceEpoch(
          const fb.Int64Reader().vTableGet(buffer, rootOffset, 14, 0),
        );
        final fileSizeParam = const fb.Int64Reader().vTableGetNullable(
          buffer,
          rootOffset,
          18,
        );
        final fileHashParam = const fb.StringReader(
          asciiOptimization: true,
        ).vTableGetNullable(buffer, rootOffset, 20);
        final object = Document(
          id: idParam,
          fileName: fileNameParam,
          filePath: filePathParam,
          createdAt: createdAtParam,
          updatedAt: updatedAtParam,
          fileSize: fileSizeParam,
          fileHash: fileHashParam,
        );
        obx_int.InternalToManyAccess.setRelInfo<Document>(
          object.chunks,
          store,
          obx_int.RelInfo<DocumentChunk>.toOneBacklink(
            4,
            object.id,
            (DocumentChunk srcObject) => srcObject.document,
          ),
        );
        return object;
      },
    ),
    DocumentChunk: obx_int.EntityDefinition<DocumentChunk>(
      model: _entities[1],
      toOneRelations: (DocumentChunk object) => [object.document],
      toManyRelations: (DocumentChunk object) => {},
      getId: (DocumentChunk object) => object.id,
      setId: (DocumentChunk object, int id) {
        object.id = id;
      },
      objectToFB: (DocumentChunk object, fb.Builder fbb) {
        final contentOffset = fbb.writeString(object.content);
        final embeddingsOffset = fbb.writeListFloat32(object.embeddings);
        fbb.startTable(5);
        fbb.addInt64(0, object.id);
        fbb.addOffset(1, contentOffset);
        fbb.addOffset(2, embeddingsOffset);
        fbb.addInt64(3, object.document.targetId);
        fbb.finish(fbb.endTable());
        return object.id;
      },
      objectFromFB: (obx.Store store, ByteData fbData) {
        final buffer = fb.BufferContext(fbData);
        final rootOffset = buffer.derefObject(0);
        final idParam = const fb.Int64Reader().vTableGet(
          buffer,
          rootOffset,
          4,
          0,
        );
        final contentParam = const fb.StringReader(
          asciiOptimization: true,
        ).vTableGet(buffer, rootOffset, 6, '');
        final embeddingsParam = const fb.ListReader<double>(
          fb.Float32Reader(),
          lazy: false,
        ).vTableGet(buffer, rootOffset, 8, []);
        final object = DocumentChunk(
          id: idParam,
          content: contentParam,
          embeddings: embeddingsParam,
        );
        object.document.targetId = const fb.Int64Reader().vTableGet(
          buffer,
          rootOffset,
          10,
          0,
        );
        object.document.attach(store);
        return object;
      },
    ),
  };

  return obx_int.ModelDefinition(model, bindings);
}