Тот же изначальный пример, но с mashumaro работает. Нужно только добавить миксин (можно для удобства в какой-нибудь базовый класс BaseConfig):
from dataclasses import dataclass
from enum import Enum
from typing import Optional
from mashumaro import DataClassYAMLMixin
class Color(Enum):
RED = "red"
GREEN = "green"
BLUE = "blue"
@dataclass
class BattleStationConfig(DataClassYAMLMixin):
@dataclass
class Processor(DataClassYAMLMixin):
core_count: int
manufacturer: str
processor: Processor
memory_gb: int
led_color: Optional[Color] = None
yaml = """
processor:
core_count: 8
manufacturer: Intel
memory_gb: 8
led_color: red
"""
print(BattleStationConfig.from_yaml(yaml))
# BattleStationConfig(processor=BattleStationConfig.Processor(core_count=8, manufacturer='Intel'), memory_gb=8, led_color=<Color.RED: 'red'>)
Тот же изначальный пример, но с mashumaro работает. Нужно только добавить миксин (можно для удобства в какой-нибудь базовый класс
BaseConfig
):