tauri-plugin-healthkit 0.1.3

A Tauri plugin for accessing HealthKit (iOS) and Health Connect (Android)
package life.thephage.healthkit

import androidx.health.connect.client.permission.HealthPermission
import androidx.health.connect.client.records.*

/**
 * HealthConnectの権限に関するユーティリティクラス
 */
object HealthPermissionUtil {
    // 権限名と対応するレコードクラスのマッピング
    private val permissionMap = mapOf(
        // 歩数
        "READ_STEPS" to HealthPermission.getReadPermission(StepsRecord::class),
        "WRITE_STEPS" to HealthPermission.getWritePermission(StepsRecord::class),
        // 心拍数
        "READ_HEART_RATE" to HealthPermission.getReadPermission(HeartRateRecord::class),
        "WRITE_HEART_RATE" to HealthPermission.getWritePermission(HeartRateRecord::class),
        // 体重
        "READ_WEIGHT" to HealthPermission.getReadPermission(WeightRecord::class),
        "WRITE_WEIGHT" to HealthPermission.getWritePermission(WeightRecord::class),
        // 睡眠
        "READ_SLEEP" to HealthPermission.getReadPermission(SleepSessionRecord::class),
        "WRITE_SLEEP" to HealthPermission.getWritePermission(SleepSessionRecord::class),
        // 運動
        "READ_EXERCISE" to HealthPermission.getReadPermission(ExerciseSessionRecord::class),
        "WRITE_EXERCISE" to HealthPermission.getWritePermission(ExerciseSessionRecord::class)
    )

    // 逆引きマップ(完全な権限文字列から短い識別子への変換)
    private val reversePermissionMap = permissionMap.entries.associateBy({ it.value }, { it.key })

    /** 全スコープの一覧 */
    val allScopes: List<String> = permissionMap.keys.toList()

    /**
     * 短い識別子から完全な権限文字列に変換します
     * @param shortName 短い権限識別子(例: "READ_STEPS")
     * @return 完全な権限文字列、見つからない場合はnull
     */
    fun toFullPermission(shortName: String): String? {
        return permissionMap[shortName]
    }

    /**
     * 完全な権限文字列から短い識別子に変換します
     * @param fullPermission 完全な権限文字列(例: "android.permission.health.READ_STEPS")
     * @return 短い権限識別子、見つからない場合はnull
     */
    fun toShortName(fullPermission: String): String? {
        return reversePermissionMap[fullPermission]
    }

    /**
     * 短い識別子のリストから完全な権限文字列のセットに変換します
     * @param shortNames 短い権限識別子のリスト
     * @return 完全な権限文字列のセット
     */
    fun toFullPermissions(shortNames: List<String>): Set<String> {
        return shortNames.mapNotNull { toFullPermission(it) }.toSet()
    }

    /**
     * 完全な権限文字列のセットから短い識別子のリストに変換します
     * @param fullPermissions 完全な権限文字列のセット
     * @return 短い権限識別子のリスト
     */
    fun toShortNames(fullPermissions: Set<String>): List<String> {
        return fullPermissions.mapNotNull { toShortName(it) }
    }
}