mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-10-31 05:07:51 -06:00
Review #998: one strict anchor parser; build fix for path.appendAnchor
The PR added `checked_anchor_from_json` next to the lenient `anchor_from_json` and dropped path.rs's import of the latter, which `path.appendAnchor` still called, so the engine didn't compile. `anchor_from_json` is now the strict parser itself (handles through `finite_numbers`), used by path.create, path.setAnchors and path.appendAnchor alike: the Pen's appended anchor with a malformed handle fails too instead of losing the handle. Tests: a non-boolean `closed` and a malformed appended handle change nothing. rustfmt. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
743fe2521e
commit
57050b0987
@@ -6,7 +6,7 @@ use serde_json::{Value, json};
|
||||
use vectorcraft_doc::{NodeId, NodeKind};
|
||||
use vectorcraft_geom::{AnchorKind, PathData, Point, SubPath, Vec2};
|
||||
|
||||
use super::create::checked_anchor_from_json;
|
||||
use super::create::anchor_from_json;
|
||||
use super::*;
|
||||
use crate::EngineError;
|
||||
|
||||
@@ -129,7 +129,7 @@ fn path_mut(d: &mut vectorcraft_doc::Document, id: NodeId) -> Result<&mut PathDa
|
||||
|
||||
fn append_anchor(s: &mut Session, p: &Value) -> Result<Value> {
|
||||
let id = id_param(p, "id").ok_or_else(|| bad("path.appendAnchor", "missing id"))?;
|
||||
let a = anchor_from_json(p).ok_or_else(|| bad("path.appendAnchor", "missing x/y"))?;
|
||||
let a = anchor_from_json(p, "path.appendAnchor")?;
|
||||
s.edit("Pen", |d, sel| {
|
||||
let path = path_mut(d, id)?;
|
||||
match path.subpaths.last_mut() {
|
||||
@@ -222,7 +222,7 @@ fn set_anchors(s: &mut Session, p: &Value) -> Result<Value> {
|
||||
.and_then(Value::as_array)
|
||||
.ok_or_else(|| bad("path.setAnchors", "each subpath needs an anchors array"))?
|
||||
.iter()
|
||||
.map(|a| checked_anchor_from_json(a, "path.setAnchors"))
|
||||
.map(|a| anchor_from_json(a, "path.setAnchors"))
|
||||
.collect::<Result<Vec<_>>>()?;
|
||||
let closed = match sp.get("closed") {
|
||||
None | Some(Value::Null) => false,
|
||||
|
||||
Reference in New Issue
Block a user