例: ASCII 型

// 著作権 2026 Google LLC
// SPDX-License-Identifier: Apache-2.0

/// 7 ビット ASCII でエンコードされていることが保証されたテキスト。
pub struct Ascii<'a>(&'a mut [u8]);

impl<'a> Ascii<'a> {
    pub fn new(bytes: &'a mut [u8]) -> Option<Self> {
        bytes.iter().all(|&b| b.is_ascii()).then(|| Ascii(bytes))
    }

    /// ASCII の妥当性を検査せずに、バイトスライスから新しい `Ascii` を
    /// 作成します。
    ///
    /// # 安全性
    ///
    /// 非 ASCII バイトを与えると未定義動作になります。
    pub unsafe fn new_unchecked(bytes: &'a mut [u8]) -> Self {
        Ascii(bytes)
    }
}

Ascii 型はバイトスライスを包む最小限のラッパーです。内部的には、両者は 同じ表現を共有しています。ただし、Ascii では最上位ビットを 使用してはなりません。”

任意: リリースビルドに影響を与えることなく、テスト中に事前条件を debug_assert! で検証できることを、この例に 追記してください。

// 著作権 2026 Google LLC
// SPDX-License-Identifier: Apache-2.0

unsafe fn new_unchecked(bytes: &mut [u8]) -> Self {
    debug_assert!(bytes.iter().all(|&b| b.is_ascii()))
    Ascii(bytes)
}