use asdf_overlay_client::common::event::window::input;
use napi_derive::napi;
#[napi]
pub enum Ime {
Enabled {
lang: String,
conversion: u16,
},
Changed {
lang: String,
},
ConversionChanged {
conversion: u16,
},
CandidateChanged { list: ImeCandidateList },
CandidateClosed,
Compose {
text: String,
caret: u32,
},
Commit {
text: String,
},
Disabled,
}
impl From<input::Ime> for Ime {
fn from(ime: input::Ime) -> Self {
match ime {
input::Ime::Enabled { lang, conversion } => Ime::Enabled {
lang,
conversion: conversion.bits(),
},
input::Ime::Changed(lang) => Ime::Changed { lang },
input::Ime::ConversionChanged(conversion) => Ime::ConversionChanged {
conversion: conversion.bits(),
},
input::Ime::CandidateChanged(list) => Ime::CandidateChanged { list: list.into() },
input::Ime::CandidateClosed => Ime::CandidateClosed,
input::Ime::Compose { text, caret } => Ime::Compose {
text,
caret: caret as _,
},
input::Ime::Commit(text) => Ime::Commit { text },
input::Ime::Disabled => Ime::Disabled,
}
}
}
#[napi(object)]
pub struct ImeCandidateList {
pub page_start_index: u32,
pub page_size: u32,
pub selected_index: u32,
pub candidates: Vec<String>,
}
impl From<input::ImeCandidateList> for ImeCandidateList {
fn from(list: input::ImeCandidateList) -> Self {
ImeCandidateList {
page_start_index: list.page_start_index,
page_size: list.page_size,
selected_index: list.selected_index,
candidates: list.candidates,
}
}
}