"""Serializers for the ``configs`` API. Reads expose ``key``, the (possibly masked) ``value``, and the definition metadata the UI needs to render a form. Writes carry only ``value``; coercion and validation happen in :class:`~infrasynth.configs.services.ConfigService` so there is a single source of truth. """ from __future__ import annotations from rest_framework import serializers __all__ = ["ConfigValueSerializer", "ConfigWriteSerializer"] class ConfigValueSerializer(serializers.Serializer): key = serializers.CharField() value = serializers.JSONField(allow_null=True) # type: ignore[assignment] type = serializers.CharField(allow_null=True) group = serializers.CharField(allow_blank=True) label = serializers.CharField(allow_blank=True) # type: ignore[assignment] is_secret = serializers.BooleanField() is_overridden = serializers.BooleanField() updated_at = serializers.DateTimeField(allow_null=True) class ConfigWriteSerializer(serializers.Serializer): value = serializers.JSONField(required=True, allow_null=True) # type: ignore[assignment]