Skip to main content

coil_assets/
error.rs

1use coil_storage::{DeliveryMode, StorageExecutionError, StoragePlanningError, StoragePolicy};
2use thiserror::Error;
3
4#[derive(Debug, Error, PartialEq, Eq)]
5pub enum AssetModelError {
6    #[error(transparent)]
7    Storage(#[from] StoragePlanningError),
8    #[error(transparent)]
9    Execution(#[from] StorageExecutionError),
10    #[error("`{field}` cannot be empty")]
11    EmptyField { field: &'static str },
12    #[error(
13        "deployment artifact `{logical_path}` must be content-addressed and include fingerprint `{fingerprint}` in `{hashed_path}`"
14    )]
15    UnhashedDeploymentArtifact {
16        logical_path: String,
17        hashed_path: String,
18        fingerprint: String,
19    },
20    #[error("deployment release `{release_id}` contains duplicate logical path `{logical_path}`")]
21    DuplicateDeploymentArtifact {
22        release_id: String,
23        logical_path: String,
24    },
25    #[error(
26        "deployment artifact `{logical_path}` resolved to policy {policy:?}; deployment artifacts must remain public object-store assets"
27    )]
28    InvalidDeploymentPolicy {
29        logical_path: String,
30        policy: StoragePolicy,
31    },
32    #[error("asset `{asset_id}` has no live published revision")]
33    MissingLiveRevision { asset_id: String },
34    #[error("asset `{asset_id}` is not in a published state")]
35    NotPublished { asset_id: String },
36    #[error("asset `{asset_id}` cannot be delivered publicly with mode `{delivery_mode}`")]
37    PublicDeliveryRequiresPublicCdn {
38        asset_id: String,
39        delivery_mode: DeliveryMode,
40    },
41    #[error("delivery planning for `{logical_path}` requires an object-store key")]
42    MissingObjectKey { logical_path: String },
43    #[error("delivery planning for `{logical_path}` requires a local path")]
44    MissingLocalPath { logical_path: String },
45    #[error("delivery planning for `{logical_path}` requires a CDN base URL")]
46    MissingCdnBaseUrl { logical_path: String },
47    #[error("delivery planning for `{logical_path}` requires an app proxy base path")]
48    MissingAppProxyBase { logical_path: String },
49    #[error("asset `{asset_id}` has no live revision to unpublish")]
50    CannotUnpublishWithoutLiveRevision { asset_id: String },
51    #[error("theme asset root `{root}` is missing")]
52    MissingThemeAssetRoot { root: String },
53    #[error("theme asset source `{path}` could not be read: {message}")]
54    ThemeAssetReadFailed { path: String, message: String },
55    #[error("theme asset source was not found for logical path `{logical_path}`")]
56    MissingThemeAssetSource { logical_path: String },
57}