#![doc = include_str!("../examples/clock_card.rs")]
#![no_std]
extern crate alloc;
#[cfg(any(feature = "std", not(target_arch = "wasm32")))]
extern crate std;
#[cfg(target_endian = "big")]
compile_error!("the shared surface buffer is little-endian");
mod bindings;
mod colour;
mod error;
mod geometry;
mod host;
mod input;
mod local;
#[cfg(all(target_arch = "wasm32", not(feature = "std")))]
mod runtime;
mod ui_runtime;
pub mod api;
pub mod daemon;
pub mod draw;
pub mod surface;
#[cfg(not(target_arch = "wasm32"))]
pub mod testing;
pub use api::{
Json, Target, account, calls, capabilities, claims, config, events, health, live, secrets, url,
values, view,
};
pub use colour::{Attrs, Colour, Rgba, Style, ThemeSlot, recede};
pub use draw::{Area, Image, Shapes, font};
pub use error::{Error, Result};
pub use geometry::{Geometry, Rect};
pub use input::{Button, Key, KeyCode, KeyPhase, Modifiers, Pointer, PointerKind};
pub use surface::{AnySurface, AnySurfaceMut, Cell, Cells, Instances, Pixels, Surface};
pub use ui_runtime::{Context, Event, Frame, Power, UiPlugin};
pub use standard_plugin_macros::ui;
pub use standard_plugin_macros::daemon;
pub use libm;
pub mod prelude {
pub use crate::daemon::DaemonPlugin;
pub use crate::{
AnySurface, Area, Attrs, Button, Cells, Colour, Context, Error, Event, Frame, Geometry,
Instances, Json, Key, KeyCode, Modifiers, Pixels, Pointer, PointerKind, Rect, Rgba, Shapes,
Style, Surface, Target, ThemeSlot, UiPlugin,
};
pub use alloc::borrow::ToOwned;
pub use alloc::boxed::Box;
pub use alloc::format;
pub use alloc::string::{String, ToString};
pub use alloc::vec;
pub use alloc::vec::Vec;
}
pub mod sources {
pub const WIT: &str = include_str!("../wit/plugin.wit");
pub mod examples {
pub const CLOCK_CARD: &str = include_str!("../examples/clock_card.rs");
pub const HEARTBEAT_DAEMON: &str = include_str!("../examples/heartbeat_daemon.rs");
pub const TOGETHER_UI: &str = include_str!("../examples/together_ui.rs");
pub const TOGETHER_COMPANION: &str = include_str!("../examples/together_companion.rs");
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct Guide {
pub name: &'static str,
pub text: &'static str,
}
impl Guide {
#[must_use]
pub fn title(&self) -> &'static str {
self.text
.lines()
.next()
.and_then(|line| line.strip_prefix("# "))
.unwrap_or(self.name)
}
}
pub const GUIDES: &[Guide] = &[
Guide {
name: "README",
text: include_str!("../docs/README.md"),
},
Guide {
name: "getting-started",
text: include_str!("../docs/getting-started.md"),
},
Guide {
name: "agent-guide",
text: include_str!("../docs/agent-guide.md"),
},
Guide {
name: "manifest",
text: include_str!("../docs/manifest.md"),
},
Guide {
name: "grants",
text: include_str!("../docs/grants.md"),
},
Guide {
name: "rendering",
text: include_str!("../docs/rendering.md"),
},
Guide {
name: "input",
text: include_str!("../docs/input.md"),
},
Guide {
name: "working-together",
text: include_str!("../docs/working-together.md"),
},
Guide {
name: "daemon-plugins",
text: include_str!("../docs/daemon-plugins.md"),
},
Guide {
name: "testing",
text: include_str!("../docs/testing.md"),
},
Guide {
name: "publishing",
text: include_str!("../docs/publishing.md"),
},
Guide {
name: "abi",
text: include_str!("../docs/abi.md"),
},
Guide {
name: "other-languages",
text: include_str!("../docs/other-languages.md"),
},
];
}
pub mod guide {
#[doc = include_str!("../docs/README.md")]
pub mod index {}
#[doc = include_str!("../docs/getting-started.md")]
pub mod getting_started {}
#[doc = include_str!("../docs/agent-guide.md")]
pub mod agent_guide {}
#[doc = include_str!("../docs/manifest.md")]
pub mod manifest {}
#[doc = include_str!("../docs/grants.md")]
pub mod grants {}
#[doc = include_str!("../docs/rendering.md")]
pub mod rendering {}
#[doc = include_str!("../docs/input.md")]
pub mod input {}
#[doc = include_str!("../docs/working-together.md")]
pub mod working_together {}
#[doc = include_str!("../docs/daemon-plugins.md")]
pub mod daemon_plugins {}
#[doc = include_str!("../docs/testing.md")]
pub mod testing {}
#[doc = include_str!("../docs/publishing.md")]
pub mod publishing {}
#[doc = include_str!("../docs/abi.md")]
pub mod abi {}
#[doc = include_str!("../docs/other-languages.md")]
pub mod other_languages {}
}
#[doc(hidden)]
pub mod __private {
pub use crate::bindings::{daemon as daemon_bindings, ui as ui_bindings};
pub use crate::daemon::runtime::DaemonRuntime;
pub use crate::ui_runtime::UiRuntime;
pub use alloc::string::String;
}
#[doc(hidden)]
#[macro_export]
macro_rules! __export_ui {
($plugin:ty) => {
const _: () = {
static RUNTIME: $crate::__private::UiRuntime<$plugin> =
$crate::__private::UiRuntime::new();
struct Export;
impl $crate::__private::ui_bindings::Guest for Export {
fn activate(config: $crate::__private::String) {
RUNTIME.activate(config);
}
fn frame(
now_ms: u64,
interval_ms: u32,
power: $crate::__private::ui_bindings::Power,
) -> Option<u64> {
RUNTIME.frame(now_ms, interval_ms, power.into())
}
fn event(event: $crate::__private::ui_bindings::Event) {
RUNTIME.event(event.into());
}
fn deactivate() {
RUNTIME.deactivate();
}
}
$crate::__export_ui_plugin_impl!(Export with_types_in $crate::__private::ui_bindings);
};
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! __export_daemon {
($plugin:ty) => {
const _: () = {
static RUNTIME: $crate::__private::DaemonRuntime<$plugin> =
$crate::__private::DaemonRuntime::new();
struct Export;
impl $crate::__private::daemon_bindings::Guest for Export {
fn activate(config: $crate::__private::String) {
RUNTIME.activate(config);
}
fn event(event: $crate::__private::daemon_bindings::Event) {
RUNTIME.event(event.into());
}
fn drive(now_ms: u64) -> Option<u64> {
RUNTIME.drive(now_ms)
}
fn deactivate() {
RUNTIME.deactivate();
}
}
impl $crate::__private::daemon_bindings::exports::standard::plugin::daemon_events::Guest
for Export
{
fn handle_event(
event: $crate::__private::daemon_bindings::exports::standard::plugin::daemon_events::DaemonEvent,
) {
RUNTIME.event(event.into());
}
}
impl $crate::__private::daemon_bindings::exports::standard::plugin::companion::Guest
for Export
{
fn handle_call(
method: $crate::__private::String,
payload: $crate::__private::String,
from: $crate::__private::daemon_bindings::exports::standard::plugin::companion::Caller,
) -> Result<
$crate::__private::String,
$crate::__private::ui_bindings::standard::plugin::types::CallError,
> {
RUNTIME
.handle_call(&method, payload, from.into())
.map_err(Into::into)
}
}
#[cfg(target_family = "wasm")]
$crate::__export_daemon_plugin_impl!(
Export with_types_in $crate::__private::daemon_bindings
);
#[cfg(not(target_family = "wasm"))]
#[allow(dead_code)]
fn native_entry_points() {
use $crate::__private::daemon_bindings::Guest as _;
use $crate::__private::daemon_bindings::exports::standard::plugin::companion::Guest as _;
use $crate::__private::daemon_bindings::exports::standard::plugin::daemon_events::Guest as _;
let _ = (
Export::activate,
Export::event,
Export::handle_event,
Export::drive,
Export::deactivate,
Export::handle_call,
);
}
};
};
}