Files
oak-editor/crates/oak-core
Mike-Solar 244d5e860f
CI / Build & test (Windows) (push) Failing after 7s
workspace: kebab-case crates, app under crates/oak-app, shared versions
All crates take the oak-* kebab-case naming (oak-audio, oak-codec,
oak-common, oak-core, oak-ffmpeg-link, oak-node, oak-otio, oak-plugin,
oak-render, oak-storage, oak-task, oak-timeline, oak-undo), with the
lib identifiers rewritten (oakrender:: -> oak_render::, oakcore_rs:: ->
oak_core::, ...) across all 226 referencing files.

The GUI application moves from the workspace root into
crates/oak-app/: src/, build.rs (paths fixed for the new location) and
tests/ travel with it, the root Cargo.toml becomes workspace-only
([workspace] + workspace.package + profiles), and the app package
inherits the workspace version. The screenshots example becomes a
standalone crate examples/simple_player/ with its own Cargo.toml.

Every crate now inherits the single workspace version
(version.workspace = true), and the workflows' crate paths and the
build docs follow the renames.

Validated with a clean cargo check --workspace.
2026-08-22 16:58:37 +08:00
..

oakcore-rs — Rust value-type foundation for the oak Rust modules

Status: declaration draft for review (no implementation, not wired into any build). Companion to crates/oaknode and crates/oakrender.

Rust reimplementation of the oakcore C++ value types that cross every module boundary: Rational, TimeRange, TimeRangeList, pixel/sample format enums. These are pure data types with value semantics — the one place where duplicating the C++ layout discipline in plain Rust is both safe and required (a Rust crate cannot hold C++ objects by value).

Rules:

  • Bit-exact arithmetic compatibility with olive::core::Rational (reduction, overflow behavior, comparison) — the golden rule is the C++ test-suite semantics, not "ideal" rational math.
  • #[repr(C)] only where a type crosses the C ABI; everything else is plain Rust with Copy + Clone + Eq + Hash.
  • No I/O, no allocation in arithmetic paths, no panics on degenerate input (denominator zero follows the C++ sentinel semantics).