Встраивание
Как добавить Axion Engine в свой Rust-проект и начать управлять приложениями.
02 Встраивание
Axion Engine поставляется как Rust-crate axion-engine. Его можно подключить в свой проект, создать экземпляр и управлять приложениями программно — без CLI и без оболочки.
2.1Зависимость
Добавьте crate в Cargo.toml:
[dependencies]
axion-engine = { git = "https://github.com/axion-project/axion" }
Все подсистемы (capabilities, permissions, package, workspace, storage, secrets, ipc, protocol, runtime) подтягиваются автоматически.
2.2Инициализация
Создайте экземпляр Engine через EngineOptions:
use axion_engine::{AxionEngine, EngineOptions};
use std::path::Path;
let options = EngineOptions::new(Path::new("/home/user/.axion"));
let engine = AxionEngine::init(options)?;
EngineOptions::new(data_dir) принимает корневой каталог данных — сюда Engine положит установленные пакеты, политику permissions, секреты и состояние workspace. Если каталога нет, он будет создан.
2.3Управление пакетами
Engine предоставляет методы для полного цикла установки:
// Установка из байтов .axn
let app = engine.install(&axn_bytes)?;
// Установка из файла
let app = engine.install_file(Path::new("my-app.axn"))?;
// Обновление (проверяет capabilities; требует consent при расширении прав)
let diff = engine.update(&pkg, true)?;
// Удаление
engine.uninstall("my_app")?;
// Список установленных приложений
let apps = engine.list_apps()?;
update() с consent: false вернёт ошибку. Пользователь должен явно подтвердить расширение прав.2.4Запуск и управление
// Запуск приложения — возвращает UUID сессии
let run_id = engine.launch("my_app")?;
// Получение текущего состояния
let state = engine.lifecycle_of(run_id); // Some(Running)
// Приостановка и возобновление
engine.suspend(run_id)?;
engine.resume(run_id)?;
// Остановка
engine.stop(run_id)?;
Метод engine.running() возвращает список всех запущенных сессий с их идентификаторами и текущими состояниями.
2.5Workspace
Workspace определяет каталог проекта, с которым работает приложение:
// Открыть workspace по пути
engine.open_workspace(Path::new("/home/user/project"))?;
// Получить текущий workspace
if let Some(ws) = engine.workspace() {
println!("root: {}", ws.root);
println!("writable: {}", ws.writable);
if let Some(git) = &ws.git {
println!("branch: {}", git.branch);
}
}