fn normalize_display_name( input: Option<String>, ) -> Result<Option<String>, String>
归一化显示名称:trim 后为空 → None;超过 50 字符报错。