fn from_unsafe()

in native/desktop-macos/src/macos/application_menu.rs [132:181]


    fn from_unsafe(item: &AppMenuItem) -> Result<Self> {
        let safe_item = match item {
            &AppMenuItem::ActionItem {
                enabled,
                state,
                ref title,
                special_tag,
                keystroke,
                item_id,
            } => {
                let keystroke = if let Some(keystroke) = keystroke {
                    Some(AppMenuKeystrokeSafe {
                        key: copy_to_ns_string(&keystroke.key)?,
                        modifiers: keystroke.modifiers,
                    })
                } else {
                    None
                };
                Self::Action {
                    enabled,
                    state,
                    title: copy_to_ns_string(title)?,
                    special_tag,
                    keystroke,
                    item_id,
                }
            }
            AppMenuItem::SeparatorItem => Self::Separator,
            sub_menu @ &AppMenuItem::SubMenuItem {
                ref title,
                special_tag,
                items,
                items_count,
            } => {
                let items = {
                    if items.is_null() {
                        return Err(anyhow!("Null found in {sub_menu:?}"));
                    }
                    unsafe { slice::from_raw_parts(items, items_count) }
                };
                let safe_items: Result<Vec<_>> = items.iter().map(|e| Self::from_unsafe(e)).collect();
                Self::SubMenu {
                    title: copy_to_ns_string(title)?,
                    special_tag,
                    items: safe_items?,
                }
            }
        };
        Ok(safe_item)
    }