ocs_doc_api: Phase 4 set_view + viewport-view query

- SetViewportView op + GetViewportView query (append-only).
- backend set_viewport_view (update Viewport.view_target/view_height) + viewport_view.
- facade Entity::set_view/viewport_view (Viewport returns Entity).
- spec Viewport methods; api_reference + binding_schema regenerated; mocks + baseline.
- Test phase4_set_view_and_view_query -> 609 host lib + 3 consistency green.
- Phase 4 complete.
This commit is contained in:
Sebastian committed 2026-09-06 10:16:27 +02:00
1 parent 67655add72
commit e6c132e0eb
15 files changed
+187 -7

No files matched your search

+16 -2
View File
@@ -29,6 +29,8 @@ pub struct MockBackend {
dimension_measurements: HashMap<ObjectId, f64>,
/// Stored insert attributes.
attributes_store: HashMap<ObjectId, Vec<(String, String)>>,
/// Stored viewport views (target, height).
viewport_views: HashMap<ObjectId, ([f64; 3], f64)>,
}
impl MockBackend {
@@ -138,8 +140,10 @@ impl DocApiBackend for MockBackend {
}
Ok(self.alloc("Insert"))
}
fn add_viewport(&mut self, _spec: &ocs_doc_api::ops::ViewportSpec) -> ApiResult<ObjectId> {
Ok(self.alloc("Viewport"))
fn add_viewport(&mut self, spec: &ocs_doc_api::ops::ViewportSpec) -> ApiResult<ObjectId> {
let id = self.alloc("Viewport");
self.viewport_views.insert(id, (spec.view_target, spec.view_height));
Ok(id)
}
fn add_text(&mut self, spec: &ocs_doc_api::ops::TextSpec) -> ApiResult<ObjectId> {
let id = self.alloc("Text");
@@ -200,6 +204,16 @@ impl DocApiBackend for MockBackend {
fn block_entities(&self, _block_name: &str) -> ApiResult<Vec<EntityView>> {
Ok(Vec::new())
}
fn set_viewport_view(&mut self, id: ObjectId, view_target: [f64; 3], view_height: f64) -> ApiResult<()> {
if !self.entity_exists(id) {
return Err(ApiError::UnknownId(id));
}
self.viewport_views.insert(id, (view_target, view_height));
Ok(())
}
fn viewport_view(&self, id: ObjectId) -> ApiResult<([f64; 3], f64)> {
self.viewport_views.get(&id).copied().ok_or(ApiError::UnknownId(id))
}
}
fn add_vertex(&mut self, id: ObjectId, _at: usize, _point: [f64; 3]) -> ApiResult<()> {
if self.entity_exists(id) {