Releases: chronista-club/club-kdl
v0.11.1
Changelog
このプロジェクトの主要な変更を記録します。
フォーマットは Keep a Changelog に基づいており、
このプロジェクトは セマンティックバージョニング に準拠しています。
[Unreleased]
[0.11.1] - 2026-05-25
修正
- CI/release:
release.ymlの crates.io publish 順を依存グラフ topological
に修正 —derive → main → compose → codegenの順に並べ替え。PR #26
で codegen が compose に依存するようになったが release.yml の順は古い
まま放置していたため、v0.11.0 release で codegen publish 時点で
club-kdl-compose = "^0.11.0"を crates.io 上で解決できず部分公開
状態(derive と main のみ 0.11.0 published、codegen と compose は
0.10.0 のまま)になっていた。本リリースで 4 crate 全部を 0.11.1 で
揃え直す。
含まれる機能
- v0.11.0 の機能内容(codegen が compose 経由で multi-file schema 対応 / 新公開
APIparse_doc/parse_path/ParseErrorの#[non_exhaustive]化)
は変わらず。本リリースは workflow ordering bug の fix のみ。
[0.11.0] - 2026-05-25
追加
- codegen:
(<)directive を透過的に解決 — codegen の CLI と library
公開 API がclub-kdl-compose経由で動作するようになり、(<)file/
(<)globdirective を含む multi-file schema を「読んで合成してから
lower」する流れが標準に。(<)を含まない schema は compose を no-op で
通過し、出力は v0.10.0 と byte 一致(後方互換)。 - codegen: 新しい公開 API 2 つ:
parser::parse_doc(&KdlDocument) -> Result<Schema, ParseError>—
既に手元にKdlDocumentがある consumer 向けの IO 無し低レベル API。parser::parse_path(impl AsRef<Path>) -> Result<Schema, ParseError>—
ファイルパスから compose 経由でロード・解決する高レベル API。CLI も
このパスを通る。
- 既存
parser::parse(&str)は不変、引き続き pure-text 入力 path として
維持される。
変更 (BREAKING)
- codegen:
ParseErrorに#[non_exhaustive]属性 +Compose(ComposeError)
variant を追加 — 将来の variant 追加 (Io / Network / 新 dialect の
validation 等) を non-breaking で行えるようにするための一度きりの調整。
下流 consumer がmatch err { Kdl(_) | Validation(_) => ... }で網羅
していた場合は_ => ...arm を足す必要がある。
[0.10.0] - 2026-05-25
追加
club-kdl-composecrate を新設 — KDL ドキュメントの複数ファイル合成を
提供する独立 crate(bare lib 名kdl_compose)。(<)file/(<)glob
directive を解決して指定ファイルの top-level node を取り込み位置に
splice する。- directive 構文 — タグ
(<)+ variant (file/glob) の二段構造。
KDL の()タグ慣用「型表明」と区別するため、単語ではなく記号タグを
採用(<の mnemonic は「他ファイルからこの位置に内容が流入する」)。 - 公開 API:
compose(path) -> KdlDocumentで解決済みドキュメントを返し、
from_path<T>(path) -> Tでclub-kdl連携の typed deserialize まで一気通貫。 - 位置自由 — directive は top-level だけでなく任意の
protocol/channel
等の block 内にも書ける(block の children として展開)。 - 取り込み元相対パス のみ、CWD / search path / 環境変数解決はしない。
- cycle 検出 — A→B→A も A→A 自己 include も明示エラーで止める。
- glob 0 件マッチ はエラーではなく空(仕様)。
- Phase 2 オプション(children block 形):
only "A" "B"/except "X"/
rename "Old" "New"+ scalar propertyas="ns"で namespace prefix。
apply 順は filter → rename → as= prefix。as=は top-level node の
first string arg のみ rewrite し、内部参照は author の責務とする
(compose は schema semantics 非依存)。 - core
club-kdlは pure parser のまま —from_strは IO ゼロを維持し、
composer は opt-in(tokio/tokio-utilパターン)。 - 64 テスト: unit 38 + integration 25 + runnable doc-test 1。
transform_node/parse_directive/parse_options_blockを unit で
直接叩く設計で、ピラミッドを Small 59 / Medium 39 / Large 2 % に整えた。
- directive 構文 — タグ
[0.9.1] - 2026-05-20
修正
- codegen: TypeScript の channel type map を
interface→typeに —
<Channel>ChannelEventTypes/<Channel>ChannelRequestTypesをinterface
で出力していたため、SDK のChannelMeta.__types(Record<string, unknown>)
に代入できなかった(interfaceは暗黙の index signature を持たない)。
type別名で出力し、生成ChannelMetaconst がChannelMetaを満たすようにする。
[0.9.0] - 2026-05-19
追加
- codegen: protocol 方言に channel envelope enum —
channelに
envelope="<tag>"を付けると、その channel の全requestを束ねる
discriminated union を生成する。Rust は#[serde(tag="…")]の内部タグ
enum(field 無し request は unit variant)、TypeScript は
({ t: "…" } & Payload)の判別 union、Zod はz.discriminatedUnion。
envelope無しの channel は従来どおり per-request の型のみで、出力は
v0.8.0 と byte 一致(後方互換)。
変更
- codegen: identifier sanitize —
request/event名に含まれる
:/.を識別子の語区切りとして扱い、wire 名(lane:delete)を
正当な型名(LaneDelete)へ変換する。元の wire 名は#[serde(rename)]
で保持。これまで:入りの名前は生成コードをコンパイル不能にしていた。
これに伴い protocol 方言の request / event 由来の型名は PascalCase に
揃う。
内部
- 生成出力を実コンパイルする integration test を追加(Rust は使い捨て
crate でcargo build、TypeScript はbunx tsc --noEmit)。文字列
アサーションでは取りこぼす serde 属性の構文ミス等を検出する。CI の
testjob に Bun セットアップを追加。
[0.8.0] - 2026-05-17
追加
- codegen: KDL spec v2 Tier 1 —
record(実体テーブル)/relation
(グラフエッジ)/link<T>(レコード参照)/ union 型 / literal 型を追加。
「構造 + 繋がり」を持つデータモデルを KDL で第一級表現できる。 - codegen: KDL spec v2 Tier 2 —
fieldおよび型定義のdescription
(→ doc コメント /COMMENT/.describe())、constraints
(min / max / min_length / max_length / pattern → Zod.min()等・
SurrealQLASSERT)。
変更
- codegen (BREAKING):
fieldのデフォルトを required に反転 — 無印の
fieldは required。optional はoptional=#trueで opt-in
(従来は optional がデフォルト)。 - codegen: SurrealQL —
ASSERT … INをINSIDEに統一。optional
field のASSERTは$value = NONE OR …でガード。
[0.7.0] - 2026-05-17
追加
- codegen: Zod emitter — KDL schema から Zod schema (TypeScript の
ランタイム validator) を生成。 enum はz.enum、 struct はz.object。
Zod schema は値で前方参照できないため enum を struct より先に出力する。
unison のブラウザクライアントが KDL schema 由来の型 + 検証を持つための
基盤。 - codegen: SurrealQL emitter — KDL schema から SurrealDB の schema DDL
(DEFINE TABLE/DEFINE FIELD) を生成。 enum 参照はASSERT $value IN [...]、 struct 参照はrecord<table>link、 optional はoption<T>。
protocol 方言は DB 表現を持たないため data 方言のみが対象。 - codegen: CLI に
zod/surrealqlターゲット追加 — これで 4 ターゲット
(rust / typescript / zod / surrealql) が出揃った。 - codegen: CLI 統合テストと parse→emit の end-to-end テストを追加
(codegen/tests/integration.rs)。
修正
- codegen: parser が未定義の型参照 (
field type="..."がstruct/
enumとして未定義の名前を指す) を検証するように。 これまでは未定義型が
emitter まで素通りし、 生成コードのコンパイルエラーとして遠くで顕在化
していた。 - codegen: Rust 予約語 (
typeなど) の field 名を raw identifier
(r#type) でエスケープ。 生成 Rust コードのコンパイル不能を防ぐ。
ドキュメント
- codegen:
lib.rsの対応ターゲット記述を実態に同期 (4 ターゲット)。
[0.6.0] - 2026-05-17
追加
club-kdl-codegencrate を新設: KDL schema ファイルから Rust /
TypeScript のコードを生成する crate。 IR (data / protocol の 2 方言) +
parser + emitter + CLI で構成。 workspace の 3 つ目の member。 (PR #12)- NDKDL —
append_node: 値を 1 つの KDL ノードとしてファイル末尾に追記する
ヘルパー (club_kdl::append_node)。 KDL を 1 ノード = 1 レコードのストリーム
(ログ・メトリクス・イベント) として扱うための入口。to_string_prettyが
ドキュメント全体の round-trip 用なのに対し、 ファイル全体を読まずに追記する。
追記後のファイルは#[kdl(document)]構造体で読み戻せる。 (Refs #4) - guide ドキュメント (
docs/guide/): カスタム型ガイド / KDL 設計ベスト
プラクティス / トラブルシュート の 3 本を新設。 - README en/ja 構成:
README.md(日本語) +README.en.md(英語) の
二言語構成に。
Note
append_node は public API への additive な追加です (semver minor)。
[0.5.1] - 2026-05-16
追加
- dual license:
MIT OR Apache-2.0(Rust ecosystem 標準) - MSRV を明示:
rust-version = "1.94"(workspace) [package.metadata.docs.rs]: docs.rs での all-features build- doctest 実行可能化:
lib.rs/de.rs/ser.rsの example をignoreから実行可能 doctest へ - CI 強化 (
.github/workflows/ci.yml):fmt --check/clippy -D warnings/doc -D warnings- multi-OS (ubuntu / macOS / windows) × multi-toolchain (stable / beta)
- MSRV テスト (
rust-version自動読み取り) cargo-deny(license / advisories / bans)cargo-semver-checks(PR 時のみ)
- Release workflow (
.github/workflows/release.yml):- tag push (
v*.*.*) で derive → main の順に自動 publish workflow_dispatchで dry-run サポート- 自動 GitHub Release 生成
- tag push (
- OSS hygiene:
CONTRIBUTING.md/SECURITY.md/CODE_OF_CONDUCT.md- Issue templates (bug / feature)、 PR template
dependabot.yml(cargo + github-actions weekly)deny.toml
- derive crate metadata 補完:
keywords/categories/readme/homepage
変更
- LICENSE 年度更新:
2025→2025-2026 Cargo.tomlの derive 依存を=0.5.1で pin
修正
cargo fmt --checkで検出された tests/exhaustive_mapping.rs の use 順序cargo clippyで検出された警告 9 件:collapsible_if(derive/src/lib.rs, 4 件)bool_assert_comparison(tests/exhaustive_mapping.rs, 3 件)approx_constant(tests/exhaustive_mapping.rs, 2 件)
- benches/kdl_vs_json.rs の unused import / dead code
Note
これは 品質整備リリース で、 public API への変更はありません (semver patch)。
[0.5.0] - 2026-05-15
変更 (Breaking)
- lib name を package name と統一:
unison_kdl→club_kdl/unison_kdl_derive→club_kdl_derive - v0.4.0 の rename trick (
[lib].name据置 + 内部 dep alias) を撤廃、 命名を一貫させた - 下流の
use unison_kdl::...はuse club_kdl::...に書き換えが必要
# Cargo.toml
club-kdl = "0.5"use club_kdl::{KdlDeserialize, KdlSerialize};[0.4.0] - 2026-05-15
変更 (Breaking — Cargo.toml level only)
- crate を
unison-kdlからclub-kdlに rename (chronista-club 命名規則に統一)-
crates.io 上の名前:
unison-kdl→club-kdl -
derive crate も同様:
unison-kdl-derive→club-kdl-derive -
lib name は
unison_kdl/unison_kdl_deriveで据置 — ソースコードのuse unison_kdl::...は変更不要 -
下流 consumer は Cargo.toml の dep 行のみ更新:
# 旧 unison-kdl = "0.3" # 新 club-kdl = "0.4" # または alias で旧来の import 感覚を維持 unison_kdl = { package = "club-kdl", version = "0.4" }
-
内部
- ディレクトリ構造は据置 (
derive/等)。 package name のみ rename。 [lib].nameを明示的に指定 (unison_kdl/unison_kdl_derive) して import path を保護。- 親 crate の
pub use unison_kdl_derive::...は alias 付き dep 経由で維持
(unison_kdl_derive = { package = "club-kdl-derive", ... })。
命名規則の根拠
chronista-club ecosystem の crates.io 公開 crate は club- prefix で統一する。
| Layer | Prefix | 例 |
|---|---|---|
| 内部ツール / plugin | cc- |
ccwire, ccws |
| 公開 crate (library) | club- |
club-unison, club-kdl |
- 関連 PR: chronista-club/unison PR #31 ([`club-uniso...
v0.10.0
Changelog
このプロジェクトの主要な変更を記録します。
フォーマットは Keep a Changelog に基づいており、
このプロジェクトは セマンティックバージョニング に準拠しています。
Unreleased
0.10.0 - 2026-05-25
追加
club-kdl-composecrate を新設 — KDL ドキュメントの複数ファイル合成を
提供する独立 crate(bare lib 名kdl_compose)。(<)file/(<)glob
directive を解決して指定ファイルの top-level node を取り込み位置に
splice する。- directive 構文 — タグ
(<)+ variant (file/glob) の二段構造。
KDL の()タグ慣用「型表明」と区別するため、単語ではなく記号タグを
採用(<の mnemonic は「他ファイルからこの位置に内容が流入する」)。 - 公開 API:
compose(path) -> KdlDocumentで解決済みドキュメントを返し、
from_path<T>(path) -> Tでclub-kdl連携の typed deserialize まで一気通貫。 - 位置自由 — directive は top-level だけでなく任意の
protocol/channel
等の block 内にも書ける(block の children として展開)。 - 取り込み元相対パス のみ、CWD / search path / 環境変数解決はしない。
- cycle 検出 — A→B→A も A→A 自己 include も明示エラーで止める。
- glob 0 件マッチ はエラーではなく空(仕様)。
- Phase 2 オプション(children block 形):
only "A" "B"/except "X"/
rename "Old" "New"+ scalar propertyas="ns"で namespace prefix。
apply 順は filter → rename → as= prefix。as=は top-level node の
first string arg のみ rewrite し、内部参照は author の責務とする
(compose は schema semantics 非依存)。 - core
club-kdlは pure parser のまま —from_strは IO ゼロを維持し、
composer は opt-in(tokio/tokio-utilパターン)。 - 64 テスト: unit 38 + integration 25 + runnable doc-test 1。
transform_node/parse_directive/parse_options_blockを unit で
直接叩く設計で、ピラミッドを Small 59 / Medium 39 / Large 2 % に整えた。
- directive 構文 — タグ
0.9.1 - 2026-05-20
修正
- codegen: TypeScript の channel type map を
interface→typeに —
<Channel>ChannelEventTypes/<Channel>ChannelRequestTypesをinterface
で出力していたため、SDK のChannelMeta.__types(Record<string, unknown>)
に代入できなかった(interfaceは暗黙の index signature を持たない)。
type別名で出力し、生成ChannelMetaconst がChannelMetaを満たすようにする。
0.9.0 - 2026-05-19
追加
- codegen: protocol 方言に channel envelope enum —
channelに
envelope="<tag>"を付けると、その channel の全requestを束ねる
discriminated union を生成する。Rust は#[serde(tag="…")]の内部タグ
enum(field 無し request は unit variant)、TypeScript は
({ t: "…" } & Payload)の判別 union、Zod はz.discriminatedUnion。
envelope無しの channel は従来どおり per-request の型のみで、出力は
v0.8.0 と byte 一致(後方互換)。
変更
- codegen: identifier sanitize —
request/event名に含まれる
:/.を識別子の語区切りとして扱い、wire 名(lane:delete)を
正当な型名(LaneDelete)へ変換する。元の wire 名は#[serde(rename)]
で保持。これまで:入りの名前は生成コードをコンパイル不能にしていた。
これに伴い protocol 方言の request / event 由来の型名は PascalCase に
揃う。
内部
- 生成出力を実コンパイルする integration test を追加(Rust は使い捨て
crate でcargo build、TypeScript はbunx tsc --noEmit)。文字列
アサーションでは取りこぼす serde 属性の構文ミス等を検出する。CI の
testjob に Bun セットアップを追加。
0.8.0 - 2026-05-17
追加
- codegen: KDL spec v2 Tier 1 —
record(実体テーブル)/relation
(グラフエッジ)/link<T>(レコード参照)/ union 型 / literal 型を追加。
「構造 + 繋がり」を持つデータモデルを KDL で第一級表現できる。 - codegen: KDL spec v2 Tier 2 —
fieldおよび型定義のdescription
(→ doc コメント /COMMENT/.describe())、constraints
(min / max / min_length / max_length / pattern → Zod.min()等・
SurrealQLASSERT)。
変更
- codegen (BREAKING):
fieldのデフォルトを required に反転 — 無印の
fieldは required。optional はoptional=#trueで opt-in
(従来は optional がデフォルト)。 - codegen: SurrealQL —
ASSERT … INをINSIDEに統一。optional
field のASSERTは$value = NONE OR …でガード。
0.7.0 - 2026-05-17
追加
- codegen: Zod emitter — KDL schema から Zod schema (TypeScript の
ランタイム validator) を生成。 enum はz.enum、 struct はz.object。
Zod schema は値で前方参照できないため enum を struct より先に出力する。
unison のブラウザクライアントが KDL schema 由来の型 + 検証を持つための
基盤。 - codegen: SurrealQL emitter — KDL schema から SurrealDB の schema DDL
(DEFINE TABLE/DEFINE FIELD) を生成。 enum 参照はASSERT $value IN [...]、 struct 参照はrecord<table>link、 optional はoption<T>。
protocol 方言は DB 表現を持たないため data 方言のみが対象。 - codegen: CLI に
zod/surrealqlターゲット追加 — これで 4 ターゲット
(rust / typescript / zod / surrealql) が出揃った。 - codegen: CLI 統合テストと parse→emit の end-to-end テストを追加
(codegen/tests/integration.rs)。
修正
- codegen: parser が未定義の型参照 (
field type="..."がstruct/
enumとして未定義の名前を指す) を検証するように。 これまでは未定義型が
emitter まで素通りし、 生成コードのコンパイルエラーとして遠くで顕在化
していた。 - codegen: Rust 予約語 (
typeなど) の field 名を raw identifier
(r#type) でエスケープ。 生成 Rust コードのコンパイル不能を防ぐ。
ドキュメント
- codegen:
lib.rsの対応ターゲット記述を実態に同期 (4 ターゲット)。
0.6.0 - 2026-05-17
追加
club-kdl-codegencrate を新設: KDL schema ファイルから Rust /
TypeScript のコードを生成する crate。 IR (data / protocol の 2 方言) +
parser + emitter + CLI で構成。 workspace の 3 つ目の member。 (PR #12)- NDKDL —
append_node: 値を 1 つの KDL ノードとしてファイル末尾に追記する
ヘルパー (club_kdl::append_node)。 KDL を 1 ノード = 1 レコードのストリーム
(ログ・メトリクス・イベント) として扱うための入口。to_string_prettyが
ドキュメント全体の round-trip 用なのに対し、 ファイル全体を読まずに追記する。
追記後のファイルは#[kdl(document)]構造体で読み戻せる。 (Refs #4) - guide ドキュメント (
docs/guide/): カスタム型ガイド / KDL 設計ベスト
プラクティス / トラブルシュート の 3 本を新設。 - README en/ja 構成:
README.md(日本語) +README.en.md(英語) の
二言語構成に。
Note
append_node は public API への additive な追加です (semver minor)。
0.5.1 - 2026-05-16
追加
- dual license:
MIT OR Apache-2.0(Rust ecosystem 標準) - MSRV を明示:
rust-version = "1.94"(workspace) [package.metadata.docs.rs]: docs.rs での all-features build- doctest 実行可能化:
lib.rs/de.rs/ser.rsの example をignoreから実行可能 doctest へ - CI 強化 (
.github/workflows/ci.yml):fmt --check/clippy -D warnings/doc -D warnings- multi-OS (ubuntu / macOS / windows) × multi-toolchain (stable / beta)
- MSRV テスト (
rust-version自動読み取り) cargo-deny(license / advisories / bans)cargo-semver-checks(PR 時のみ)
- Release workflow (
.github/workflows/release.yml):- tag push (
v*.*.*) で derive → main の順に自動 publish workflow_dispatchで dry-run サポート- 自動 GitHub Release 生成
- tag push (
- OSS hygiene:
CONTRIBUTING.md/SECURITY.md/CODE_OF_CONDUCT.md- Issue templates (bug / feature)、 PR template
dependabot.yml(cargo + github-actions weekly)deny.toml
- derive crate metadata 補完:
keywords/categories/readme/homepage
変更
- LICENSE 年度更新:
2025→2025-2026 Cargo.tomlの derive 依存を=0.5.1で pin
修正
cargo fmt --checkで検出された tests/exhaustive_mapping.rs の use 順序cargo clippyで検出された警告 9 件:collapsible_if(derive/src/lib.rs, 4 件)bool_assert_comparison(tests/exhaustive_mapping.rs, 3 件)approx_constant(tests/exhaustive_mapping.rs, 2 件)
- benches/kdl_vs_json.rs の unused import / dead code
Note
これは 品質整備リリース で、 public API への変更はありません (semver patch)。
0.5.0 - 2026-05-15
変更 (Breaking)
- lib name を package name と統一:
unison_kdl→club_kdl/unison_kdl_derive→club_kdl_derive - v0.4.0 の rename trick (
[lib].name据置 + 内部 dep alias) を撤廃、 命名を一貫させた - 下流の
use unison_kdl::...はuse club_kdl::...に書き換えが必要
# Cargo.toml
club-kdl = "0.5"use club_kdl::{KdlDeserialize, KdlSerialize};0.4.0 - 2026-05-15
変更 (Breaking — Cargo.toml level only)
- crate を
unison-kdlからclub-kdlに rename (chronista-club 命名規則に統一)-
crates.io 上の名前:
unison-kdl→club-kdl -
derive crate も同様:
unison-kdl-derive→club-kdl-derive -
lib name は
unison_kdl/unison_kdl_deriveで据置 — ソースコードのuse unison_kdl::...は変更不要 -
下流 consumer は Cargo.toml の dep 行のみ更新:
# 旧 unison-kdl = "0.3" # 新 club-kdl = "0.4" # または alias で旧来の import 感覚を維持 unison_kdl = { package = "club-kdl", version = "0.4" }
-
内部
- ディレクトリ構造は据置 (
derive/等)。 package name のみ rename。 [lib].nameを明示的に指定 (unison_kdl/unison_kdl_derive) して import path を保護。- 親 crate の
pub use unison_kdl_derive::...は alias 付き dep 経由で維持
(unison_kdl_derive = { package = "club-kdl-derive", ... })。
命名規則の根拠
chronista-club ecosystem の crates.io 公開 crate は club- prefix で統一する。
| Layer | Prefix | 例 |
|---|---|---|
| 内部ツール / plugin | cc- |
ccwire, ccws |
| 公開 crate (library) | club- |
club-unison, club-kdl |
- 関連 PR: chronista-club/unison PR #31 (
club-unisonへの rename) - 命名規則 memory: creo-memories
mem_1Cb2haX6ZicuCweEpxAvj4
0.3.0 - 2026-03-11
追加
- enum data variants 対応 (struct / newtype / unit バリアントの KDL シリアライズ・デシリアライズ)
0.2.0 - 2026-03-11
追加
kdl_node_name()自動解決#[kdl(alias = "...")]属性usize型対応- 網羅テスト整備
What's Changed
v0.9.0
Changelog
このプロジェクトの主要な変更を記録します。
フォーマットは Keep a Changelog に基づいており、
このプロジェクトは セマンティックバージョニング に準拠しています。
Unreleased
0.9.0 - 2026-05-19
追加
- codegen: protocol 方言に channel envelope enum —
channelに
envelope="<tag>"を付けると、その channel の全requestを束ねる
discriminated union を生成する。Rust は#[serde(tag="…")]の内部タグ
enum(field 無し request は unit variant)、TypeScript は
({ t: "…" } & Payload)の判別 union、Zod はz.discriminatedUnion。
envelope無しの channel は従来どおり per-request の型のみで、出力は
v0.8.0 と byte 一致(後方互換)。
変更
- codegen: identifier sanitize —
request/event名に含まれる
:/.を識別子の語区切りとして扱い、wire 名(lane:delete)を
正当な型名(LaneDelete)へ変換する。元の wire 名は#[serde(rename)]
で保持。これまで:入りの名前は生成コードをコンパイル不能にしていた。
これに伴い protocol 方言の request / event 由来の型名は PascalCase に
揃う。
内部
- 生成出力を実コンパイルする integration test を追加(Rust は使い捨て
crate でcargo build、TypeScript はbunx tsc --noEmit)。文字列
アサーションでは取りこぼす serde 属性の構文ミス等を検出する。CI の
testjob に Bun セットアップを追加。
0.8.0 - 2026-05-17
追加
- codegen: KDL spec v2 Tier 1 —
record(実体テーブル)/relation
(グラフエッジ)/link<T>(レコード参照)/ union 型 / literal 型を追加。
「構造 + 繋がり」を持つデータモデルを KDL で第一級表現できる。 - codegen: KDL spec v2 Tier 2 —
fieldおよび型定義のdescription
(→ doc コメント /COMMENT/.describe())、constraints
(min / max / min_length / max_length / pattern → Zod.min()等・
SurrealQLASSERT)。
変更
- codegen (BREAKING):
fieldのデフォルトを required に反転 — 無印の
fieldは required。optional はoptional=#trueで opt-in
(従来は optional がデフォルト)。 - codegen: SurrealQL —
ASSERT … INをINSIDEに統一。optional
field のASSERTは$value = NONE OR …でガード。
0.7.0 - 2026-05-17
追加
- codegen: Zod emitter — KDL schema から Zod schema (TypeScript の
ランタイム validator) を生成。 enum はz.enum、 struct はz.object。
Zod schema は値で前方参照できないため enum を struct より先に出力する。
unison のブラウザクライアントが KDL schema 由来の型 + 検証を持つための
基盤。 - codegen: SurrealQL emitter — KDL schema から SurrealDB の schema DDL
(DEFINE TABLE/DEFINE FIELD) を生成。 enum 参照はASSERT $value IN [...]、 struct 参照はrecord<table>link、 optional はoption<T>。
protocol 方言は DB 表現を持たないため data 方言のみが対象。 - codegen: CLI に
zod/surrealqlターゲット追加 — これで 4 ターゲット
(rust / typescript / zod / surrealql) が出揃った。 - codegen: CLI 統合テストと parse→emit の end-to-end テストを追加
(codegen/tests/integration.rs)。
修正
- codegen: parser が未定義の型参照 (
field type="..."がstruct/
enumとして未定義の名前を指す) を検証するように。 これまでは未定義型が
emitter まで素通りし、 生成コードのコンパイルエラーとして遠くで顕在化
していた。 - codegen: Rust 予約語 (
typeなど) の field 名を raw identifier
(r#type) でエスケープ。 生成 Rust コードのコンパイル不能を防ぐ。
ドキュメント
- codegen:
lib.rsの対応ターゲット記述を実態に同期 (4 ターゲット)。
0.6.0 - 2026-05-17
追加
club-kdl-codegencrate を新設: KDL schema ファイルから Rust /
TypeScript のコードを生成する crate。 IR (data / protocol の 2 方言) +
parser + emitter + CLI で構成。 workspace の 3 つ目の member。 (PR #12)- NDKDL —
append_node: 値を 1 つの KDL ノードとしてファイル末尾に追記する
ヘルパー (club_kdl::append_node)。 KDL を 1 ノード = 1 レコードのストリーム
(ログ・メトリクス・イベント) として扱うための入口。to_string_prettyが
ドキュメント全体の round-trip 用なのに対し、 ファイル全体を読まずに追記する。
追記後のファイルは#[kdl(document)]構造体で読み戻せる。 (Refs #4) - guide ドキュメント (
docs/guide/): カスタム型ガイド / KDL 設計ベスト
プラクティス / トラブルシュート の 3 本を新設。 - README en/ja 構成:
README.md(日本語) +README.en.md(英語) の
二言語構成に。
Note
append_node は public API への additive な追加です (semver minor)。
0.5.1 - 2026-05-16
追加
- dual license:
MIT OR Apache-2.0(Rust ecosystem 標準) - MSRV を明示:
rust-version = "1.94"(workspace) [package.metadata.docs.rs]: docs.rs での all-features build- doctest 実行可能化:
lib.rs/de.rs/ser.rsの example をignoreから実行可能 doctest へ - CI 強化 (
.github/workflows/ci.yml):fmt --check/clippy -D warnings/doc -D warnings- multi-OS (ubuntu / macOS / windows) × multi-toolchain (stable / beta)
- MSRV テスト (
rust-version自動読み取り) cargo-deny(license / advisories / bans)cargo-semver-checks(PR 時のみ)
- Release workflow (
.github/workflows/release.yml):- tag push (
v*.*.*) で derive → main の順に自動 publish workflow_dispatchで dry-run サポート- 自動 GitHub Release 生成
- tag push (
- OSS hygiene:
CONTRIBUTING.md/SECURITY.md/CODE_OF_CONDUCT.md- Issue templates (bug / feature)、 PR template
dependabot.yml(cargo + github-actions weekly)deny.toml
- derive crate metadata 補完:
keywords/categories/readme/homepage
変更
- LICENSE 年度更新:
2025→2025-2026 Cargo.tomlの derive 依存を=0.5.1で pin
修正
cargo fmt --checkで検出された tests/exhaustive_mapping.rs の use 順序cargo clippyで検出された警告 9 件:collapsible_if(derive/src/lib.rs, 4 件)bool_assert_comparison(tests/exhaustive_mapping.rs, 3 件)approx_constant(tests/exhaustive_mapping.rs, 2 件)
- benches/kdl_vs_json.rs の unused import / dead code
Note
これは 品質整備リリース で、 public API への変更はありません (semver patch)。
0.5.0 - 2026-05-15
変更 (Breaking)
- lib name を package name と統一:
unison_kdl→club_kdl/unison_kdl_derive→club_kdl_derive - v0.4.0 の rename trick (
[lib].name据置 + 内部 dep alias) を撤廃、 命名を一貫させた - 下流の
use unison_kdl::...はuse club_kdl::...に書き換えが必要
# Cargo.toml
club-kdl = "0.5"use club_kdl::{KdlDeserialize, KdlSerialize};0.4.0 - 2026-05-15
変更 (Breaking — Cargo.toml level only)
- crate を
unison-kdlからclub-kdlに rename (chronista-club 命名規則に統一)-
crates.io 上の名前:
unison-kdl→club-kdl -
derive crate も同様:
unison-kdl-derive→club-kdl-derive -
lib name は
unison_kdl/unison_kdl_deriveで据置 — ソースコードのuse unison_kdl::...は変更不要 -
下流 consumer は Cargo.toml の dep 行のみ更新:
# 旧 unison-kdl = "0.3" # 新 club-kdl = "0.4" # または alias で旧来の import 感覚を維持 unison_kdl = { package = "club-kdl", version = "0.4" }
-
内部
- ディレクトリ構造は据置 (
derive/等)。 package name のみ rename。 [lib].nameを明示的に指定 (unison_kdl/unison_kdl_derive) して import path を保護。- 親 crate の
pub use unison_kdl_derive::...は alias 付き dep 経由で維持
(unison_kdl_derive = { package = "club-kdl-derive", ... })。
命名規則の根拠
chronista-club ecosystem の crates.io 公開 crate は club- prefix で統一する。
| Layer | Prefix | 例 |
|---|---|---|
| 内部ツール / plugin | cc- |
ccwire, ccws |
| 公開 crate (library) | club- |
club-unison, club-kdl |
- 関連 PR: chronista-club/unison PR #31 (
club-unisonへの rename) - 命名規則 memory: creo-memories
mem_1Cb2haX6ZicuCweEpxAvj4
0.3.0 - 2026-03-11
追加
- enum data variants 対応 (struct / newtype / unit バリアントの KDL シリアライズ・デシリアライズ)
0.2.0 - 2026-03-11
追加
kdl_node_name()自動解決#[kdl(alias = "...")]属性usize型対応- 網羅テスト整備
What's Changed
- feat(codegen): protocol 方言に envelope enum + identifier sanitize by @mako-357 in #21
- chore(release): v0.9.0 — codegen envelope enum + identifier sanitize by @mako-357 in #22
Full Changelog: v0.8.0...v0.9.0
v0.7.0
Changelog
このプロジェクトの主要な変更を記録します。
フォーマットは Keep a Changelog に基づいており、
このプロジェクトは セマンティックバージョニング に準拠しています。
Unreleased
0.7.0 - 2026-05-17
追加
- codegen: Zod emitter — KDL schema から Zod schema (TypeScript の
ランタイム validator) を生成。 enum はz.enum、 struct はz.object。
Zod schema は値で前方参照できないため enum を struct より先に出力する。
unison のブラウザクライアントが KDL schema 由来の型 + 検証を持つための
基盤。 - codegen: SurrealQL emitter — KDL schema から SurrealDB の schema DDL
(DEFINE TABLE/DEFINE FIELD) を生成。 enum 参照はASSERT $value IN [...]、 struct 参照はrecord<table>link、 optional はoption<T>。
protocol 方言は DB 表現を持たないため data 方言のみが対象。 - codegen: CLI に
zod/surrealqlターゲット追加 — これで 4 ターゲット
(rust / typescript / zod / surrealql) が出揃った。 - codegen: CLI 統合テストと parse→emit の end-to-end テストを追加
(codegen/tests/integration.rs)。
修正
- codegen: parser が未定義の型参照 (
field type="..."がstruct/
enumとして未定義の名前を指す) を検証するように。 これまでは未定義型が
emitter まで素通りし、 生成コードのコンパイルエラーとして遠くで顕在化
していた。 - codegen: Rust 予約語 (
typeなど) の field 名を raw identifier
(r#type) でエスケープ。 生成 Rust コードのコンパイル不能を防ぐ。
ドキュメント
- codegen:
lib.rsの対応ターゲット記述を実態に同期 (4 ターゲット)。
0.6.0 - 2026-05-17
追加
club-kdl-codegencrate を新設: KDL schema ファイルから Rust /
TypeScript のコードを生成する crate。 IR (data / protocol の 2 方言) +
parser + emitter + CLI で構成。 workspace の 3 つ目の member。 (PR #12)- NDKDL —
append_node: 値を 1 つの KDL ノードとしてファイル末尾に追記する
ヘルパー (club_kdl::append_node)。 KDL を 1 ノード = 1 レコードのストリーム
(ログ・メトリクス・イベント) として扱うための入口。to_string_prettyが
ドキュメント全体の round-trip 用なのに対し、 ファイル全体を読まずに追記する。
追記後のファイルは#[kdl(document)]構造体で読み戻せる。 (Refs #4) - guide ドキュメント (
docs/guide/): カスタム型ガイド / KDL 設計ベスト
プラクティス / トラブルシュート の 3 本を新設。 - README en/ja 構成:
README.md(日本語) +README.en.md(英語) の
二言語構成に。
Note
append_node は public API への additive な追加です (semver minor)。
0.5.1 - 2026-05-16
追加
- dual license:
MIT OR Apache-2.0(Rust ecosystem 標準) - MSRV を明示:
rust-version = "1.94"(workspace) [package.metadata.docs.rs]: docs.rs での all-features build- doctest 実行可能化:
lib.rs/de.rs/ser.rsの example をignoreから実行可能 doctest へ - CI 強化 (
.github/workflows/ci.yml):fmt --check/clippy -D warnings/doc -D warnings- multi-OS (ubuntu / macOS / windows) × multi-toolchain (stable / beta)
- MSRV テスト (
rust-version自動読み取り) cargo-deny(license / advisories / bans)cargo-semver-checks(PR 時のみ)
- Release workflow (
.github/workflows/release.yml):- tag push (
v*.*.*) で derive → main の順に自動 publish workflow_dispatchで dry-run サポート- 自動 GitHub Release 生成
- tag push (
- OSS hygiene:
CONTRIBUTING.md/SECURITY.md/CODE_OF_CONDUCT.md- Issue templates (bug / feature)、 PR template
dependabot.yml(cargo + github-actions weekly)deny.toml
- derive crate metadata 補完:
keywords/categories/readme/homepage
変更
- LICENSE 年度更新:
2025→2025-2026 Cargo.tomlの derive 依存を=0.5.1で pin
修正
cargo fmt --checkで検出された tests/exhaustive_mapping.rs の use 順序cargo clippyで検出された警告 9 件:collapsible_if(derive/src/lib.rs, 4 件)bool_assert_comparison(tests/exhaustive_mapping.rs, 3 件)approx_constant(tests/exhaustive_mapping.rs, 2 件)
- benches/kdl_vs_json.rs の unused import / dead code
Note
これは 品質整備リリース で、 public API への変更はありません (semver patch)。
0.5.0 - 2026-05-15
変更 (Breaking)
- lib name を package name と統一:
unison_kdl→club_kdl/unison_kdl_derive→club_kdl_derive - v0.4.0 の rename trick (
[lib].name据置 + 内部 dep alias) を撤廃、 命名を一貫させた - 下流の
use unison_kdl::...はuse club_kdl::...に書き換えが必要
# Cargo.toml
club-kdl = "0.5"use club_kdl::{KdlDeserialize, KdlSerialize};0.4.0 - 2026-05-15
変更 (Breaking — Cargo.toml level only)
- crate を
unison-kdlからclub-kdlに rename (chronista-club 命名規則に統一)-
crates.io 上の名前:
unison-kdl→club-kdl -
derive crate も同様:
unison-kdl-derive→club-kdl-derive -
lib name は
unison_kdl/unison_kdl_deriveで据置 — ソースコードのuse unison_kdl::...は変更不要 -
下流 consumer は Cargo.toml の dep 行のみ更新:
# 旧 unison-kdl = "0.3" # 新 club-kdl = "0.4" # または alias で旧来の import 感覚を維持 unison_kdl = { package = "club-kdl", version = "0.4" }
-
内部
- ディレクトリ構造は据置 (
derive/等)。 package name のみ rename。 [lib].nameを明示的に指定 (unison_kdl/unison_kdl_derive) して import path を保護。- 親 crate の
pub use unison_kdl_derive::...は alias 付き dep 経由で維持
(unison_kdl_derive = { package = "club-kdl-derive", ... })。
命名規則の根拠
chronista-club ecosystem の crates.io 公開 crate は club- prefix で統一する。
| Layer | Prefix | 例 |
|---|---|---|
| 内部ツール / plugin | cc- |
ccwire, ccws |
| 公開 crate (library) | club- |
club-unison, club-kdl |
- 関連 PR: chronista-club/unison PR #31 (
club-unisonへの rename) - 命名規則 memory: creo-memories
mem_1Cb2haX6ZicuCweEpxAvj4
0.3.0 - 2026-03-11
追加
- enum data variants 対応 (struct / newtype / unit バリアントの KDL シリアライズ・デシリアライズ)
0.2.0 - 2026-03-11
追加
kdl_node_name()自動解決#[kdl(alias = "...")]属性usize型対応- 網羅テスト整備
What's Changed
- feat(codegen): club-kdl-codegen Phase 1 — IR + parser + Rust/TS emitter + CLI by @mako-357 in #12
- fix(codegen): 0.6.1 整備 — 型参照検証 / 予約語 / テスト / 運用ズレ by @mako-357 in #13
- feat(codegen): Zod / SurrealQL emitter — v0.7.0 by @mako-357 in #14
Full Changelog: v0.6.0...v0.7.0
v0.6.0
Changelog
このプロジェクトの主要な変更を記録します。
フォーマットは Keep a Changelog に基づいており、
このプロジェクトは セマンティックバージョニング に準拠しています。
0.6.0 - 2026-05-17
追加
- NDKDL —
append_node: 値を 1 つの KDL ノードとしてファイル末尾に追記する
ヘルパー (club_kdl::append_node)。 KDL を 1 ノード = 1 レコードのストリーム
(ログ・メトリクス・イベント) として扱うための入口。to_string_prettyが
ドキュメント全体の round-trip 用なのに対し、 ファイル全体を読まずに追記する。
追記後のファイルは#[kdl(document)]構造体で読み戻せる。 (Refs #4) - guide ドキュメント (
docs/guide/): カスタム型ガイド / KDL 設計ベスト
プラクティス / トラブルシュート の 3 本を新設。 - README en/ja 構成:
README.md(日本語) +README.en.md(英語) の
二言語構成に。
Note
append_node は public API への additive な追加です (semver minor)。
0.5.1 - 2026-05-16
追加
- dual license:
MIT OR Apache-2.0(Rust ecosystem 標準) - MSRV を明示:
rust-version = "1.94"(workspace) [package.metadata.docs.rs]: docs.rs での all-features build- doctest 実行可能化:
lib.rs/de.rs/ser.rsの example をignoreから実行可能 doctest へ - CI 強化 (
.github/workflows/ci.yml):fmt --check/clippy -D warnings/doc -D warnings- multi-OS (ubuntu / macOS / windows) × multi-toolchain (stable / beta)
- MSRV テスト (
rust-version自動読み取り) cargo-deny(license / advisories / bans)cargo-semver-checks(PR 時のみ)
- Release workflow (
.github/workflows/release.yml):- tag push (
v*.*.*) で derive → main の順に自動 publish workflow_dispatchで dry-run サポート- 自動 GitHub Release 生成
- tag push (
- OSS hygiene:
CONTRIBUTING.md/SECURITY.md/CODE_OF_CONDUCT.md- Issue templates (bug / feature)、 PR template
dependabot.yml(cargo + github-actions weekly)deny.toml
- derive crate metadata 補完:
keywords/categories/readme/homepage
変更
- LICENSE 年度更新:
2025→2025-2026 Cargo.tomlの derive 依存を=0.5.1で pin
修正
cargo fmt --checkで検出された tests/exhaustive_mapping.rs の use 順序cargo clippyで検出された警告 9 件:collapsible_if(derive/src/lib.rs, 4 件)bool_assert_comparison(tests/exhaustive_mapping.rs, 3 件)approx_constant(tests/exhaustive_mapping.rs, 2 件)
- benches/kdl_vs_json.rs の unused import / dead code
Note
これは 品質整備リリース で、 public API への変更はありません (semver patch)。
0.5.0 - 2026-05-15
変更 (Breaking)
- lib name を package name と統一:
unison_kdl→club_kdl/unison_kdl_derive→club_kdl_derive - v0.4.0 の rename trick (
[lib].name据置 + 内部 dep alias) を撤廃、 命名を一貫させた - 下流の
use unison_kdl::...はuse club_kdl::...に書き換えが必要
# Cargo.toml
club-kdl = "0.5"use club_kdl::{KdlDeserialize, KdlSerialize};0.4.0 - 2026-05-15
変更 (Breaking — Cargo.toml level only)
- crate を
unison-kdlからclub-kdlに rename (chronista-club 命名規則に統一)-
crates.io 上の名前:
unison-kdl→club-kdl -
derive crate も同様:
unison-kdl-derive→club-kdl-derive -
lib name は
unison_kdl/unison_kdl_deriveで据置 — ソースコードのuse unison_kdl::...は変更不要 -
下流 consumer は Cargo.toml の dep 行のみ更新:
# 旧 unison-kdl = "0.3" # 新 club-kdl = "0.4" # または alias で旧来の import 感覚を維持 unison_kdl = { package = "club-kdl", version = "0.4" }
-
内部
- ディレクトリ構造は据置 (
derive/等)。 package name のみ rename。 [lib].nameを明示的に指定 (unison_kdl/unison_kdl_derive) して import path を保護。- 親 crate の
pub use unison_kdl_derive::...は alias 付き dep 経由で維持
(unison_kdl_derive = { package = "club-kdl-derive", ... })。
命名規則の根拠
chronista-club ecosystem の crates.io 公開 crate は club- prefix で統一する。
| Layer | Prefix | 例 |
|---|---|---|
| 内部ツール / plugin | cc- |
ccwire, ccws |
| 公開 crate (library) | club- |
club-unison, club-kdl |
- 関連 PR: chronista-club/unison PR #31 (
club-unisonへの rename) - 命名規則 memory: creo-memories
mem_1Cb2haX6ZicuCweEpxAvj4
0.3.0 - 2026-03-11
追加
- enum data variants 対応 (struct / newtype / unit バリアントの KDL シリアライズ・デシリアライズ)
0.2.0 - 2026-03-11
追加
kdl_node_name()自動解決#[kdl(alias = "...")]属性usize型対応- 網羅テスト整備
What's Changed
- feat(codegen): club-kdl-codegen crate の雛形 (Phase 1) by @mako-357 in #10
- chore(ci)(deps): Bump the actions group with 2 updates by @dependabot[bot] in #8
- chore(deps)(deps): Update criterion requirement from 0.5 to 0.8 by @dependabot[bot] in #9
- feat(stream): NDKDL の append_node helper (Refs #4) by @mako-357 in #11
New Contributors
- @dependabot[bot] made their first contribution in #8
Full Changelog: v0.5.1...v0.6.0
v0.5.1
Changelog
このプロジェクトの主要な変更を記録します。
フォーマットは Keep a Changelog に基づいており、
このプロジェクトは セマンティックバージョニング に準拠しています。
Unreleased
0.5.1 - 2026-05-16
追加
- dual license:
MIT OR Apache-2.0(Rust ecosystem 標準) - MSRV を明示:
rust-version = "1.94"(workspace) [package.metadata.docs.rs]: docs.rs での all-features build- doctest 実行可能化:
lib.rs/de.rs/ser.rsの example をignoreから実行可能 doctest へ - CI 強化 (
.github/workflows/ci.yml):fmt --check/clippy -D warnings/doc -D warnings- multi-OS (ubuntu / macOS / windows) × multi-toolchain (stable / beta)
- MSRV テスト (
rust-version自動読み取り) cargo-deny(license / advisories / bans)cargo-semver-checks(PR 時のみ)
- Release workflow (
.github/workflows/release.yml):- tag push (
v*.*.*) で derive → main の順に自動 publish workflow_dispatchで dry-run サポート- 自動 GitHub Release 生成
- tag push (
- OSS hygiene:
CONTRIBUTING.md/SECURITY.md/CODE_OF_CONDUCT.md- Issue templates (bug / feature)、 PR template
dependabot.yml(cargo + github-actions weekly)deny.toml
- derive crate metadata 補完:
keywords/categories/readme/homepage
変更
- LICENSE 年度更新:
2025→2025-2026 Cargo.tomlの derive 依存を=0.5.1で pin
修正
cargo fmt --checkで検出された tests/exhaustive_mapping.rs の use 順序cargo clippyで検出された警告 9 件:collapsible_if(derive/src/lib.rs, 4 件)bool_assert_comparison(tests/exhaustive_mapping.rs, 3 件)approx_constant(tests/exhaustive_mapping.rs, 2 件)
- benches/kdl_vs_json.rs の unused import / dead code
Note
これは 品質整備リリース で、 public API への変更はありません (semver patch)。
0.5.0 - 2026-05-15
変更 (Breaking)
- lib name を package name と統一:
unison_kdl→club_kdl/unison_kdl_derive→club_kdl_derive - v0.4.0 の rename trick (
[lib].name据置 + 内部 dep alias) を撤廃、 命名を一貫させた - 下流の
use unison_kdl::...はuse club_kdl::...に書き換えが必要
# Cargo.toml
club-kdl = "0.5"use club_kdl::{KdlDeserialize, KdlSerialize};0.4.0 - 2026-05-15
変更 (Breaking — Cargo.toml level only)
- crate を
unison-kdlからclub-kdlに rename (chronista-club 命名規則に統一)-
crates.io 上の名前:
unison-kdl→club-kdl -
derive crate も同様:
unison-kdl-derive→club-kdl-derive -
lib name は
unison_kdl/unison_kdl_deriveで据置 — ソースコードのuse unison_kdl::...は変更不要 -
下流 consumer は Cargo.toml の dep 行のみ更新:
# 旧 unison-kdl = "0.3" # 新 club-kdl = "0.4" # または alias で旧来の import 感覚を維持 unison_kdl = { package = "club-kdl", version = "0.4" }
-
内部
- ディレクトリ構造は据置 (
derive/等)。 package name のみ rename。 [lib].nameを明示的に指定 (unison_kdl/unison_kdl_derive) して import path を保護。- 親 crate の
pub use unison_kdl_derive::...は alias 付き dep 経由で維持
(unison_kdl_derive = { package = "club-kdl-derive", ... })。
命名規則の根拠
chronista-club ecosystem の crates.io 公開 crate は club- prefix で統一する。
| Layer | Prefix | 例 |
|---|---|---|
| 内部ツール / plugin | cc- |
ccwire, ccws |
| 公開 crate (library) | club- |
club-unison, club-kdl |
- 関連 PR: chronista-club/unison PR #31 (
club-unisonへの rename) - 命名規則 memory: creo-memories
mem_1Cb2haX6ZicuCweEpxAvj4
0.3.0 - 2026-03-11
追加
- enum data variants 対応 (struct / newtype / unit バリアントの KDL シリアライズ・デシリアライズ)
0.2.0 - 2026-03-11
追加
kdl_node_name()自動解決#[kdl(alias = "...")]属性usize型対応- 網羅テスト整備
What's Changed
Full Changelog: v0.5.0...v0.5.1
v0.5.0 — lib name unified
Breaking
v0.4.0 の rename trick を撤廃し、 lib name を package name と統一:
- `unison_kdl` → `club_kdl`
- `unison_kdl_derive` → `club_kdl_derive`
Migration
```toml
club-kdl = "0.5"
```
```rust
use club_kdl::{KdlDeserialize, KdlSerialize};
```
PR: #6 / 詳細: CHANGELOG.md
v0.4.0 — club-kdl
概要
chronista-club 命名規則 (公開 crate は club- prefix) に統一し、 crate を unison-kdl → club-kdl にリネーム。 lib name (unison_kdl / unison_kdl_derive) は据置で、 下流ソースコードの use unison_kdl::... は 変更不要。
変更内容
| 要素 | Before | After |
|---|---|---|
| crates.io package name | unison-kdl |
club-kdl |
| derive package name | unison-kdl-derive |
club-kdl-derive |
lib name (use xxx::...) |
unison_kdl / unison_kdl_derive |
据置 |
| workspace version | 0.3.0 | 0.4.0 (rename = breaking minor bump) |
Migration
# 旧
unison-kdl = "0.3"
# 新
club-kdl = "0.4"
# または alias 維持
unison_kdl = { package = "club-kdl", version = "0.4" }ソースコードの use unison_kdl::... は 無変更で OK。
関連
- PR: #5
- 命名規則 memory: creo
mem_1Cb2haX6ZicuCweEpxAvj4 - 先行事例: chronista-club/unison PR #31
- 詳細: CHANGELOG.md
v0.3.0
What's New
Enum Data Variants
#[derive(KdlDeserialize, KdlSerialize)] が struct / newtype / unit バリアントを持つ enum に対応。
#[derive(KdlDeserialize, KdlSerialize)]
enum Command {
#[kdl(rename = "move")]
Move { #[kdl(property)] x: f64, #[kdl(property)] y: f64 },
#[kdl(rename = "configure")]
Configure(InnerConfig),
#[kdl(rename = "quit")]
Quit,
}- 自動検出: 全バリアントが unit → スカラー enum、それ以外 → データ enum
Vec<DataEnum>サポート:#[kdl(children)]で異なるノード名の子を一括収集- Newtype バリアント名前解決: 内部型の
kdl_node_name()と衝突時に自動リネーム
Improvements
generate_field_serializers統一で ~130行のコード重複を解消- エラー伝播改善:
unwrap_or_default()→?で正しくパースエラーを報告 NodeBuilder::entry()をビルダーパターンに統一- Enum +
#[kdl(document)]のコンパイル時バリデーション追加
Full Changelog
- 150 tests (117 exhaustive + 33 integration)
- Breaking:
NodeBuilder::push_entry(&mut self)→entry(mut self) -> Self