package dev.inmo.postssystem.core.content import kotlinx.serialization.Serializable import kotlinx.serialization.modules.* typealias ContentId = String /** * Content which is planned to be registered in database */ interface Content /** * That is a content which in fact just a link to another content. It would be useful in case when user wish to reuse * some content */ @Serializable data class OtherContentLinkContent( val otherId: ContentId ) : Content fun SerializersModuleBuilder.includeContentsSerializers( block: PolymorphicModuleBuilder.() -> Unit ) { polymorphic(Content::class) { subclass(OtherContentLinkContent::class, OtherContentLinkContent.serializer()) block() } } /** * Content which is already registered in database. Using its [id] you can retrieve all known * [dev.inmo.postssystem.core.post.RegisteredPost]s by using * [dev.inmo.postssystem.core.post.repo.ReadPostsRepo.getPostsByContent] */ @Serializable data class RegisteredContent( val id: ContentId, val content: Content )