BuiltInTypeConverters.kt

/*
 * Copyright 2021 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package androidx.room

/**
 * Flags to turn on/off extra type converters provided by Room.
 *
 * For certain commonly used types (enums, UUID), Room provides automatic type converters. By
 * default, these type converters are enabled but have lower priority than user provided type
 * converters.
 *
 * You can set these flags in the [TypeConverters] annotation to turn them off / on. It
 * might be useful if you want to have more strict control over how these types are saved into
 * the database.
 */
@Target(allowedTargets = []) // Complex annotation target
@Retention(AnnotationRetention.BINARY)
public annotation class BuiltInTypeConverters(
    /**
     * Controls whether Room can generate a TypeConverter for enum types and use their
     * `name()` in the database.
     *
     * By default, it is set to [State.INHERITED] (on by default unless set to another
     * value in a higher scope).
     */
    val enums: State = State.INHERITED,

    /**
     * Controls whether Room can generate a TypeConverter for [java.util.UUID] and use its
     * `byte[]` representation while saving it into database.
     *
     * By default, it is set to [State.INHERITED] (on by default unless set to another
     * value in a higher scope).
     */
    val uuid: State = State.INHERITED,
) {
    /**
     * Control flags for built in converters.
     */
    public enum class State {
        /**
         * Room can use the built in converter.
         */
        ENABLED,
        /**
         * Room cannot use the built in converter.
         */
        DISABLED,
        /**
         * The value is inherited from the higher scope. See [TypeConverters] documentation
         * to learn more about [TypeConverter] scoping.
         * If this value is never set, it defaults to [ENABLED].
         */
        INHERITED
    }
}