7 个版本
0.2.3 | 2024 年 4 月 4 日 |
---|---|
0.2.2 | 2024 年 3 月 20 日 |
0.1.2 | 2024 年 3 月 20 日 |
#31 in macOS 和 iOS API
52KB
1K SLoC
osakit
osakit
的目标是提供对 macOS 的 OSAKit 框架
的直接访问。它使用 Objective-C 绑定来访问 OSAKit 并运行 AppleScript
和 JavaScript
。
osakit
使用 serde
进行输入输出序列化/反序列化。允许将数据传递到 JavaScript
/AppleScript
函数,并返回结果。输入和输出数据使用 Value
从 serde_json
来表示。
包含 declare_script!
宏(不稳定)以简化与 OSAKit 框架
的工作。
安装
将 osakit
添加到依赖项。如果您想使用 declare_script
宏,请指定 "full"
特性;如果您只想包含稳定 API,请指定 "stable"
特性。
[dependencies]
osakit = { version = "0.2", features = ["full"] }
使用 declare_script
的示例
use serde::{Deserialize, Serialize};
use osakit::declare_script;
use std::error::Error;
declare_script! {
#[language(JavaScript)]
#[source("
function concat(x, y) {
return x + y;
}
function multiply(a, b) {
return a * b;
}
function current_user() {
return {
id: 21,
name: \"root\"
};
}
")]
pub MyJsScript {
pub fn concat(x: &str, y: &str) -> String;
pub fn multiply(a: i32, b: i32) -> i32;
pub fn current_user() -> User;
}
}
#[derive(Deserialize, Serialize, Debug, PartialEq, Eq)]
struct User {
id: u16,
name: String,
}
fn main() -> Result<(), Box<dyn Error>> {
let script = MyJsScript::new()?;
assert_eq!(
script.multiply(3, 2)?,
6
);
assert_eq!(
script.concat("Hello, ", "World")?,
"Hello, World"
);
assert_eq!(
script.current_user()?,
User {
id: 21,
name: "root".into()
}
);
Ok(())
}
使用 Script
的示例
use osakit::{Language, Map, Script, Value, Number};
use std::error::Error;
fn main() -> Result<(), Box<dyn Error>> {
let mut script = Script::new_from_source(Language::AppleScript, "
on is_app_running()
tell application \"Hopefully Non-Existing Application\" to running
end is_app_running
on concat(x, y)
return x & y
end concat
return {id: 21, name: \"root\"}
");
script.compile()?;
assert_eq!(
script.execute()?,
Value::Object(Map::from_iter(vec![
("id".into(), Value::Number(Number::from(21))),
("name".into(), Value::String("root".into()))
]))
);
assert_eq!(
script.execute_function("concat", vec![
Value::String("Hello, ".into()),
Value::String("World!".into())
])?,
Value::String("Hello, World!".into())
);
assert_eq!(
script.execute_function("is_app_running", vec![])?,
Value::Bool(false)
);
Ok(())
}
用法
参见 完整文档。
限制
由于 OSAKit 框架
对整数值的限制,从 JavaScript
代码返回的整数类型限制为 i32
。
支持的平台
由于 OSAKit 是 Mac 特定的,因此仅支持 macOS
。
许可证
根据您的选择,许可为以下之一
- Apache 许可证 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则您提交给工作的任何贡献(根据 Apache-2.0 许可证定义)均应按上述方式双重许可,而无需任何附加条款或条件。
依赖项
~12MB
~247K SLoC