Add Kotlin serialization-based APIs#475
Open
snej wants to merge 3 commits into
Open
Conversation
- Collection.getDocumentAs(), save() - Result.data() - ResultSet.data()
Contributor
Author
|
I just noticed that Swift has model-based |
pasin
reviewed
May 14, 2026
|
|
||
| /** Saves a [DocumentModel] instance as a document in the collection, with a specified conflict handler. | ||
| * If the model's [DocumentModel.documentMeta] property is null, it will be saved as a new document with the | ||
| * given [docID], which must not be null. |
Collaborator
There was a problem hiding this comment.
In Swift, we also support id == nil as an auto generated id for a newly created doc. Can we allow that here as well?
| val doc: MutableDocument | ||
| if (meta == null) { | ||
| require(docID != null) { "docID argument must be given when saving a new document" } | ||
| doc = MutableDocument(docID) |
Collaborator
There was a problem hiding this comment.
Can we also allow null docID here (an auto id (uuid) will be generated)?
| private fun <T:DocumentModel> MutableDocument.setContentFromModel(model: T, serializer: SerializationStrategy<T>) { | ||
| val body = serializeToFleece(serializer, model) | ||
| val root = FLValue.fromData(body).asFLDict() | ||
| setContent(root, false) |
Collaborator
There was a problem hiding this comment.
Does the body need to be retained as well?
I read iOS code, and iOS is doing something similar. If I read the code correctly, Swift's DocumentEncoder calls FLEncoder_FinishDoc that returns an FLDoc, get the dict from the FLDoc, set the dict to the CBL doc, and abandon the FLDoc. So maybe the data is retained by the dict?
- (BOOL)finishIntoDocument:(CBLDocument*)document error:(NSError**)outError {
FLError error {};
FLDoc fldoc = FLEncoder_FinishDoc(_encoder, &error);
if (!fldoc) {
return convertError(error, outError);
}
Doc doc { fldoc };
Dict fleeceData = doc.asDict();
if (!fleeceData) {
return NO;
}
[document setFleece: (FLDict)fleeceData];
return YES;
}
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements Kotlin extension methods that use serialization to allow developers to work with documents and query rows as native Kotlin classes. (Equivalent to the Swift API extensions implemented last year.)
Query Results & ResultSets
Documents
Document model classes must implement a new interface
DocumentModelthat defines adocumentMetaproperty that stores the document id and revID, which is needed in order to save the document.Documents can be loaded and saved as model instances:
Lower-Level
Both of these use some new internal functions that serialize Kotlin classes to and from Fleece.