Class ConfigWriter

java.lang.Object
io.github.theword.queqiao.core.config.io.ConfigWriter

public final class ConfigWriter extends Object
配置写出器:ConfigWriteSnapshot → config.yml

职责边界(Phase 5 最重要的边界):

 ConfigWriter      = 持久化当前状态(save)
 ConfigSynchronizer= 改造文档使其符合 Schema(sync)
 
因此 save 不会删除未知字段(核心未知与 addons 未知都必须保留), 也不会补齐缺失字段——那属于 Phase 6 的 sync。

其他边界:

  • 只读:不修改 Runtime,也不修改 Document;
  • deterministic:顺序完全取自 Schema 的声明顺序,绝不按字母排序, 也不依赖任何 HashMap 迭代顺序;
  • 类型安全:标量表示由 ConfigCodec.write(Object) 决定,字符串的 YAML quoting 统一由 scalar(Object) 一处负责;
  • 不引入新的 YAML 依赖:读仍由 snakeyaml 负责,写出的文本必须能被它读回。
Since:
0.6.12
  • Constructor Details

    • ConfigWriter

      public ConfigWriter()
  • Method Details

    • render

      public String render(ConfigWriteSnapshot snapshot)
      渲染成 YAML 文本
      Parameters:
      snapshot - 写盘快照
      Returns:
      YAML 文本
    • write

      public void write(ConfigWriteSnapshot snapshot, Path target, org.slf4j.Logger logger) throws IOException
      原子写入目标文件(复用既有的 ConfigStore:临时文件 → fsync → 原子替换 → 5 份备份轮换)

      渲染先于写盘,因此渲染失败绝不会破坏已有的 config.yml; 写盘本身也是"先写临时文件再替换",磁盘满 / 权限不足等 I/O 错误不会造成配置丢失。

      Parameters:
      snapshot - 写盘快照
      target - 目标文件
      logger - 日志实现,可为 null
      Throws:
      IOException - 写盘失败