open_gpui_canvas/
format.rs1use crate::{CanvasSnapshot, DocumentError};
2
3pub const CANVAS_DOCUMENT_FORMAT_VERSION: u32 = 1;
4pub const CANVAS_DOCUMENT_MIN_SUPPORTED_FORMAT_VERSION: u32 = 1;
5pub const CANVAS_SNAPSHOT_MIGRATIONS: &[CanvasSnapshotMigration] = &[];
6
7#[derive(Clone, Copy, Debug, Eq, PartialEq)]
8pub struct CanvasSnapshotMigration {
9 pub from_version: u32,
10 pub to_version: u32,
11}
12
13pub fn default_document_format_version() -> u32 {
14 CANVAS_DOCUMENT_FORMAT_VERSION
15}
16
17pub fn validate_canvas_document_format_version(format_version: u32) -> Result<(), DocumentError> {
18 if format_version < CANVAS_DOCUMENT_MIN_SUPPORTED_FORMAT_VERSION
19 || format_version > CANVAS_DOCUMENT_FORMAT_VERSION
20 {
21 return Err(DocumentError::UnsupportedFormatVersion {
22 expected: CANVAS_DOCUMENT_FORMAT_VERSION,
23 found: format_version,
24 });
25 }
26
27 Ok(())
28}
29
30pub fn migrate_canvas_snapshot(
31 mut snapshot: CanvasSnapshot,
32) -> Result<CanvasSnapshot, DocumentError> {
33 validate_canvas_document_format_version(snapshot.format_version)?;
34
35 for migration in CANVAS_SNAPSHOT_MIGRATIONS {
36 if snapshot.format_version == migration.from_version {
37 snapshot.format_version = migration.to_version;
38 }
39 }
40
41 if snapshot.format_version != CANVAS_DOCUMENT_FORMAT_VERSION {
42 return Err(DocumentError::UnsupportedFormatVersion {
43 expected: CANVAS_DOCUMENT_FORMAT_VERSION,
44 found: snapshot.format_version,
45 });
46 }
47
48 Ok(snapshot)
49}