From 72743346dce9f0847dc9988ab4c43801cd8d0d0a Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Sun, 18 Mar 2018 17:30:55 +0100 Subject: [PATCH] Hide implementation under typealias. Though it is not working for java interop. Signed-off-by: Yahor Berdnikau --- .../ultrasonic/cache/PermanentFileStorage.kt | 8 +++--- .../cache/serializers/ArtistSerializer.kt | 15 +++++++---- .../cache/serializers/IndexesSerializer.kt | 26 +++++++++++-------- .../serializers/MusicFolderSerializer.kt | 17 ++++++++---- .../cache/PermanentFileStorageTest.kt | 22 ++++++++-------- .../cache/serializers/ArtistSerializerTest.kt | 12 ++++----- .../serializers/IndexesSerializerTest.kt | 6 ++--- .../serializers/MusicFolderSerializerTest.kt | 12 ++++----- 8 files changed, 68 insertions(+), 50 deletions(-) diff --git a/cache/src/main/kotlin/org/moire/ultrasonic/cache/PermanentFileStorage.kt b/cache/src/main/kotlin/org/moire/ultrasonic/cache/PermanentFileStorage.kt index 043e1fcc..dbfa9658 100644 --- a/cache/src/main/kotlin/org/moire/ultrasonic/cache/PermanentFileStorage.kt +++ b/cache/src/main/kotlin/org/moire/ultrasonic/cache/PermanentFileStorage.kt @@ -6,6 +6,8 @@ import com.twitter.serial.stream.Serial import com.twitter.serial.stream.bytebuffer.ByteBufferSerial import java.io.File +typealias DomainEntitySerializer = Serializer + internal const val STORAGE_DIR_NAME = "persistent_storage" /** @@ -14,7 +16,7 @@ internal const val STORAGE_DIR_NAME = "persistent_storage" * [serverId] is currently active server. Should be unique per server so stored data will not * interfere with other server data. * - * Look at [org.moire.ultrasonic.cache.serializers] package for available [Serializer]s. + * Look at [org.moire.ultrasonic.cache.serializers] package for available [DomainEntitySerializer]s. */ class PermanentFileStorage( private val directories: Directories, @@ -34,7 +36,7 @@ class PermanentFileStorage( fun store( name: String, objectToStore: T, - objectSerializer: Serializer + objectSerializer: DomainEntitySerializer ) { val storeFile = getFile(name) if (!storeFile.exists()) storeFile.createNewFile() @@ -46,7 +48,7 @@ class PermanentFileStorage( */ fun load( name: String, - objectDeserializer: Serializer + objectDeserializer: DomainEntitySerializer ): T? { val storeFile = getFile(name) if (!storeFile.exists()) return null diff --git a/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/ArtistSerializer.kt b/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/ArtistSerializer.kt index 96e1a9f0..751a97d5 100644 --- a/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/ArtistSerializer.kt +++ b/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/ArtistSerializer.kt @@ -8,14 +8,12 @@ import com.twitter.serial.serializer.SerializationContext import com.twitter.serial.stream.SerializerDefs import com.twitter.serial.stream.SerializerInput import com.twitter.serial.stream.SerializerOutput +import org.moire.ultrasonic.cache.DomainEntitySerializer import org.moire.ultrasonic.domain.Artist private const val SERIALIZER_VERSION = 1 -/** - * Serializer/deserializer for [Artist] domain entity. - */ -val artistSerializer get() = object : ObjectSerializer(SERIALIZER_VERSION) { +private val artistSerializer get() = object : ObjectSerializer(SERIALIZER_VERSION) { override fun serializeObject( context: SerializationContext, output: SerializerOutput>, @@ -54,7 +52,14 @@ val artistSerializer get() = object : ObjectSerializer(SERIALIZER_VERSIO } } +/** + * Serializer/deserializer for [Artist] domain entity. + */ +fun getArtistsSerializer(): DomainEntitySerializer = artistSerializer + +private val artistListSerializer = CollectionSerializers.getListSerializer(artistSerializer) + /** * Serializer/deserializer for list of [Artist] domain entities. */ -val artistListSerializer = CollectionSerializers.getListSerializer(artistSerializer) +fun getArtistListSerializer(): DomainEntitySerializer> = artistListSerializer diff --git a/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/IndexesSerializer.kt b/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/IndexesSerializer.kt index e59e837c..c237be76 100644 --- a/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/IndexesSerializer.kt +++ b/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/IndexesSerializer.kt @@ -2,28 +2,27 @@ @file:JvmName("DomainSerializers") package org.moire.ultrasonic.cache.serializers -import com.twitter.serial.serializer.CollectionSerializers import com.twitter.serial.serializer.ObjectSerializer import com.twitter.serial.serializer.SerializationContext import com.twitter.serial.stream.SerializerInput import com.twitter.serial.stream.SerializerOutput +import org.moire.ultrasonic.cache.DomainEntitySerializer import org.moire.ultrasonic.domain.Artist import org.moire.ultrasonic.domain.Indexes private const val SERIALIZATION_VERSION = 1 -val indexesSerializer get() = object : ObjectSerializer(SERIALIZATION_VERSION) { +private val indexesSerializer get() = object : ObjectSerializer(SERIALIZATION_VERSION) { override fun serializeObject( context: SerializationContext, output: SerializerOutput>, item: Indexes ) { + val artistListSerializer = getArtistListSerializer() output.writeLong(item.lastModified) .writeString(item.ignoredArticles) - .writeObject>(context, item.shortcuts, - CollectionSerializers.getListSerializer(artistSerializer)) - .writeObject>(context, item.artists, - CollectionSerializers.getListSerializer(artistSerializer)) + .writeObject>(context, item.shortcuts, artistListSerializer) + .writeObject>(context, item.artists, artistListSerializer) } override fun deserializeObject( @@ -33,12 +32,17 @@ val indexesSerializer get() = object : ObjectSerializer(SERIALIZATION_V ): Indexes? { if (versionNumber != SERIALIZATION_VERSION) return null + val artistListDeserializer = getArtistListSerializer() val lastModified = input.readLong() val ignoredArticles = input.readString() ?: return null - val shortcutsList = input.readObject(context, - CollectionSerializers.getListSerializer(artistSerializer)) ?: return null - val artistsList = input.readObject(context, - CollectionSerializers.getListSerializer(artistSerializer)) ?: return null - return Indexes(lastModified, ignoredArticles, shortcutsList, artistsList) + val shortcutsList = input.readObject(context, artistListDeserializer) ?: return null + val artistsList = input.readObject(context, artistListDeserializer) ?: return null + return Indexes(lastModified, ignoredArticles, shortcutsList.toMutableList(), + artistsList.toMutableList()) } } + +/** + * Get serializer/deserializer for [Indexes] entity. + */ +fun getIndexesSerializer(): DomainEntitySerializer = indexesSerializer diff --git a/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/MusicFolderSerializer.kt b/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/MusicFolderSerializer.kt index 655c3fd4..c65fabad 100644 --- a/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/MusicFolderSerializer.kt +++ b/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/MusicFolderSerializer.kt @@ -7,14 +7,12 @@ import com.twitter.serial.serializer.ObjectSerializer import com.twitter.serial.serializer.SerializationContext import com.twitter.serial.stream.SerializerInput import com.twitter.serial.stream.SerializerOutput +import org.moire.ultrasonic.cache.DomainEntitySerializer import org.moire.ultrasonic.domain.MusicFolder private const val SERIALIZATION_VERSION = 1 -/** - * Serializer/deserializer for [MusicFolder] domain entity. - */ -val musicFolderSerializer = object : ObjectSerializer(SERIALIZATION_VERSION) { +private val musicFolderSerializer = object : ObjectSerializer(SERIALIZATION_VERSION) { override fun serializeObject( context: SerializationContext, @@ -37,7 +35,16 @@ val musicFolderSerializer = object : ObjectSerializer(SERIALIZATION } } +/** + * Serializer/deserializer for [MusicFolder] domain entity. + */ +fun getMusicFolderSerializer(): DomainEntitySerializer = musicFolderSerializer + +private val musicFolderListSerializer = + CollectionSerializers.getListSerializer(musicFolderSerializer) + /** * Serializer/deserializer for [List] of [MusicFolder] items. */ -val musicFolderListSerializer = CollectionSerializers.getListSerializer(musicFolderSerializer) +fun getMusicFolderListSerializer(): DomainEntitySerializer> = + musicFolderListSerializer diff --git a/cache/src/test/kotlin/org/moire/ultrasonic/cache/PermanentFileStorageTest.kt b/cache/src/test/kotlin/org/moire/ultrasonic/cache/PermanentFileStorageTest.kt index 0c22e946..bd84b528 100644 --- a/cache/src/test/kotlin/org/moire/ultrasonic/cache/PermanentFileStorageTest.kt +++ b/cache/src/test/kotlin/org/moire/ultrasonic/cache/PermanentFileStorageTest.kt @@ -4,7 +4,7 @@ import org.amshove.kluent.`should contain` import org.amshove.kluent.`should equal to` import org.amshove.kluent.`should equal` import org.junit.Test -import org.moire.ultrasonic.cache.serializers.musicFolderSerializer +import org.moire.ultrasonic.cache.serializers.getMusicFolderSerializer import org.moire.ultrasonic.domain.MusicFolder import java.io.File @@ -18,7 +18,7 @@ class PermanentFileStorageTest : BaseStorageTest() { @Test fun `Should create storage dir if it is not exist`() { val item = MusicFolder("1", "2") - storage.store("test", item, musicFolderSerializer) + storage.store("test", item, getMusicFolderSerializer()) storageDir.exists() `should equal to` true getServerStorageDir().exists() `should equal to` true @@ -29,7 +29,7 @@ class PermanentFileStorageTest : BaseStorageTest() { val item = MusicFolder("1", "23") val name = "some-name" - storage.store(name, item, musicFolderSerializer) + storage.store(name, item, getMusicFolderSerializer()) val storageFiles = getServerStorageDir().listFiles() storageFiles.size `should equal to` 1 @@ -40,9 +40,9 @@ class PermanentFileStorageTest : BaseStorageTest() { fun `Should deserialize stored object`() { val item = MusicFolder("some", "nice") val name = "some-name" - storage.store(name, item, musicFolderSerializer) + storage.store(name, item, getMusicFolderSerializer()) - val loadedItem = storage.load(name, musicFolderSerializer) + val loadedItem = storage.load(name, getMusicFolderSerializer()) loadedItem `should equal` item } @@ -52,18 +52,18 @@ class PermanentFileStorageTest : BaseStorageTest() { val name = "some-nice-name" val item1 = MusicFolder("1", "1") val item2 = MusicFolder("2", "2") - storage.store(name, item1, musicFolderSerializer) - storage.store(name, item2, musicFolderSerializer) + storage.store(name, item1, getMusicFolderSerializer()) + storage.store(name, item2, getMusicFolderSerializer()) - val loadedItem = storage.load(name, musicFolderSerializer) + val loadedItem = storage.load(name, getMusicFolderSerializer()) loadedItem `should equal` item2 } @Test fun `Should clear all files when clearAll is called`() { - storage.store("name1", MusicFolder("1", "1"), musicFolderSerializer) - storage.store("name2", MusicFolder("2", "2"), musicFolderSerializer) + storage.store("name1", MusicFolder("1", "1"), getMusicFolderSerializer()) + storage.store("name2", MusicFolder("2", "2"), getMusicFolderSerializer()) storage.clearAll() @@ -72,7 +72,7 @@ class PermanentFileStorageTest : BaseStorageTest() { @Test fun `Should return null if serialized file not available`() { - val loadedItem = storage.load("some-name", musicFolderSerializer) + val loadedItem = storage.load("some-name", getMusicFolderSerializer()) loadedItem `should equal` null } diff --git a/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/ArtistSerializerTest.kt b/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/ArtistSerializerTest.kt index 74bc4221..7829467b 100644 --- a/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/ArtistSerializerTest.kt +++ b/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/ArtistSerializerTest.kt @@ -13,7 +13,7 @@ class ArtistSerializerTest : BaseStorageTest() { fun `Should correctly serialize Artist object`() { val item = Artist("id", "name", "index", "coverArt", 1, 0) - storage.store("some-name", item, artistSerializer) + storage.store("some-name", item, getArtistsSerializer()) validateSerializedData() } @@ -22,9 +22,9 @@ class ArtistSerializerTest : BaseStorageTest() { fun `Should correctly deserialize Artist object`() { val itemName = "some-name" val item = Artist("id", "name", "index", "coverArt", null, 0) - storage.store(itemName, item, artistSerializer) + storage.store(itemName, item, getArtistsSerializer()) - val loadedItem = storage.load(itemName, artistSerializer) + val loadedItem = storage.load(itemName, getArtistsSerializer()) loadedItem `should equal` item } @@ -36,7 +36,7 @@ class ArtistSerializerTest : BaseStorageTest() { Artist(id = "2", name = "some") ) - storage.store("some-name", itemsList, artistListSerializer) + storage.store("some-name", itemsList, getArtistListSerializer()) validateSerializedData() } @@ -48,9 +48,9 @@ class ArtistSerializerTest : BaseStorageTest() { Artist(id = "1"), Artist(id = "2", name = "some") ) - storage.store(name, itemsList, artistListSerializer) + storage.store(name, itemsList, getArtistListSerializer()) - val loadedItems = storage.load(name, artistListSerializer) + val loadedItems = storage.load(name, getArtistListSerializer()) loadedItems `should equal` itemsList } diff --git a/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/IndexesSerializerTest.kt b/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/IndexesSerializerTest.kt index 704d59ac..9cffbd8b 100644 --- a/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/IndexesSerializerTest.kt +++ b/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/IndexesSerializerTest.kt @@ -18,7 +18,7 @@ class IndexesSerializerTest : BaseStorageTest() { Artist("233", "some") )) - storage.store("some-name", item, indexesSerializer) + storage.store("some-name", item, getIndexesSerializer()) validateSerializedData() } @@ -31,9 +31,9 @@ class IndexesSerializerTest : BaseStorageTest() { ), mutableListOf( Artist("233", "some") )) - storage.store(name, item, indexesSerializer) + storage.store(name, item, getIndexesSerializer()) - val loadedItem = storage.load(name, indexesSerializer) + val loadedItem = storage.load(name, getIndexesSerializer()) loadedItem `should equal` item } diff --git a/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/MusicFolderSerializerTest.kt b/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/MusicFolderSerializerTest.kt index 602ffa47..0efe2811 100644 --- a/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/MusicFolderSerializerTest.kt +++ b/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/MusicFolderSerializerTest.kt @@ -13,7 +13,7 @@ class MusicFolderSerializerTest : BaseStorageTest() { fun `Should correctly serialize MusicFolder object`() { val item = MusicFolder("Music", "Folder") - storage.store("some-name", item, musicFolderSerializer) + storage.store("some-name", item, getMusicFolderSerializer()) validateSerializedData() } @@ -22,9 +22,9 @@ class MusicFolderSerializerTest : BaseStorageTest() { fun `Should correctly deserialize MusicFolder object`() { val name = "name" val item = MusicFolder("some", "none") - storage.store(name, item, musicFolderSerializer) + storage.store(name, item, getMusicFolderSerializer()) - val loadedItem = storage.load(name, musicFolderSerializer) + val loadedItem = storage.load(name, getMusicFolderSerializer()) loadedItem `should equal` item } @@ -36,7 +36,7 @@ class MusicFolderSerializerTest : BaseStorageTest() { MusicFolder("2", "2") ) - storage.store("some-name", itemsList, musicFolderListSerializer) + storage.store("some-name", itemsList, getMusicFolderListSerializer()) validateSerializedData() } @@ -48,9 +48,9 @@ class MusicFolderSerializerTest : BaseStorageTest() { MusicFolder("1", "1"), MusicFolder("2", "2") ) - storage.store(name, itemsList, musicFolderListSerializer) + storage.store(name, itemsList, getMusicFolderListSerializer()) - val loadedItem = storage.load(name, musicFolderListSerializer) + val loadedItem = storage.load(name, getMusicFolderListSerializer()) loadedItem `should equal` itemsList }