From 9062f60e3de6affec0db60d55fd596d5010a41b7 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Thu, 18 Dec 2025 23:31:34 +0100 Subject: [PATCH] ClawdisKit: accept jpg for canvas.snapshot --- .../ClawdisKit/CanvasCommandParams.swift | 18 ++++++++++++++++++ .../CanvasSnapshotFormatTests.swift | 16 ++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 apps/shared/ClawdisKit/Tests/ClawdisKitTests/CanvasSnapshotFormatTests.swift diff --git a/apps/shared/ClawdisKit/Sources/ClawdisKit/CanvasCommandParams.swift b/apps/shared/ClawdisKit/Sources/ClawdisKit/CanvasCommandParams.swift index ba2da6a57..2243dd2b0 100644 --- a/apps/shared/ClawdisKit/Sources/ClawdisKit/CanvasCommandParams.swift +++ b/apps/shared/ClawdisKit/Sources/ClawdisKit/CanvasCommandParams.swift @@ -19,6 +19,24 @@ public struct ClawdisCanvasEvalParams: Codable, Sendable, Equatable { public enum ClawdisCanvasSnapshotFormat: String, Codable, Sendable { case png case jpeg + + public init(from decoder: Decoder) throws { + let c = try decoder.singleValueContainer() + let raw = try c.decode(String.self).trimmingCharacters(in: .whitespacesAndNewlines).lowercased() + switch raw { + case "png": + self = .png + case "jpeg", "jpg": + self = .jpeg + default: + throw DecodingError.dataCorruptedError(in: c, debugDescription: "Invalid snapshot format: \(raw)") + } + } + + public func encode(to encoder: Encoder) throws { + var c = encoder.singleValueContainer() + try c.encode(self.rawValue) + } } public struct ClawdisCanvasSnapshotParams: Codable, Sendable, Equatable { diff --git a/apps/shared/ClawdisKit/Tests/ClawdisKitTests/CanvasSnapshotFormatTests.swift b/apps/shared/ClawdisKit/Tests/ClawdisKitTests/CanvasSnapshotFormatTests.swift new file mode 100644 index 000000000..5a6f18f4b --- /dev/null +++ b/apps/shared/ClawdisKit/Tests/ClawdisKitTests/CanvasSnapshotFormatTests.swift @@ -0,0 +1,16 @@ +import ClawdisKit +import Foundation +import Testing + +@Suite struct CanvasSnapshotFormatTests { + @Test func acceptsJpgAlias() throws { + struct Wrapper: Codable { + var format: ClawdisCanvasSnapshotFormat + } + + let data = try #require("{\"format\":\"jpg\"}".data(using: .utf8)) + let decoded = try JSONDecoder().decode(Wrapper.self, from: data) + #expect(decoded.format == .jpeg) + } +} +