Skip to content

RustでいうNewType、Scala3でいうOpaqueTypeっぽいのを使用し、広い型で扱われてしまうIdをわかりやすくする #206

@yamachu

Description

@yamachu

https://github.com/VOICEVOX/voicevox_core/blob/2adba0fc86a99ba67ed002d57ed200c69ede67b4/docs/guide/dev/api-design.md#:~:text=StyleId%E3%81%A8%E3%81%84%E3%81%A3%E3%81%9Fnewtype%E3%81%AF%E3%80%81%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BEnewtype%E3%81%A8%E3%81%97%E3%81%A6%E8%A1%A8%E7%8F%BE%E3%81%99%E3%82%8B%E3%81%B9%E3%81%8D%E3%81%A7%E3%81%99%E3%80%82

public record VoiceModelId(string Id)
{
    // TargetFrameworkがnetstandard2.0なので、initは小細工が必要だったはず、それを回避するため
    public string Id { get; } = Id;
}

例えばこんな感じで実装すれば出来なくはないなさそう
Idというプロパティをもうstringで出していたりするので、breakingにはなるかも

Metadata

Metadata

Assignees

Labels

breakingBreaking changes

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions