///|
/// 内容存储抽象:MVP 只实现本地文件,后续可加内存盘(测试)/对象存储。
pub trait Storage {
  /// 读原始 Markdown,不存在返回 `None`
  async fn read(Self, slug : String) -> String?

  /// 写(创建或覆盖)
  async fn write(Self, slug : String, content : String) -> Unit

  /// 删除,不存在时静默成功
  async fn delete(Self, slug : String) -> Unit

  /// 列出全部 slug
  async fn list(Self) -> Array[String]
}