oku_fs/
error.rs

1use iroh_docs::NamespaceId;
2use miette::Diagnostic;
3use std::path::PathBuf;
4use thiserror::Error;
5
6#[derive(Error, Debug, Diagnostic)]
7/// File system errors.
8pub enum OkuFsError {
9    #[error("File system entry not found.")]
10    #[diagnostic(
11        code(fs::fs_entry_not_found),
12        url(docsrs),
13        help("Please ensure that the file system entry exists before attempting to read it.")
14    )]
15    /// File system entry not found.
16    FsEntryNotFound,
17    #[error("Author cannot be created.")]
18    #[diagnostic(code(fs::author_cannot_be_created), url(docsrs))]
19    /// Author cannot be created.
20    AuthorCannotBeCreated,
21    #[error("Cannot retrieve default author.")]
22    #[diagnostic(code(fs::cannot_retrieve_default_author), url(docsrs))]
23    /// Cannot retrieve default author.
24    CannotRetrieveDefaultAuthor,
25    #[error("Cannot start node.")]
26    #[diagnostic(code(fs::cannot_start_node), url(docsrs))]
27    /// Cannot start node.
28    CannotStartNode,
29    #[error("Cannot retrieve list of authors.")]
30    #[diagnostic(code(fs::cannot_retrieve_authors), url(docsrs))]
31    /// Cannot retrieve list of authors.
32    CannotRetrieveAuthors,
33    #[error("Cannot retrieve node address.")]
34    #[diagnostic(code(fs::cannot_retrieve_node_address), url(docsrs))]
35    /// Cannot retrieve node address.
36    CannotRetrieveNodeAddress,
37    #[error("Cannot stop node.")]
38    #[diagnostic(code(fs::cannot_stop_node), url(docsrs))]
39    /// Cannot stop node.
40    CannotStopNode,
41    #[error("Cannot create replica.")]
42    #[diagnostic(code(fs::cannot_create_replica), url(docsrs))]
43    /// Cannot create replica.
44    CannotCreateReplica,
45    #[error("Cannot exit replica.")]
46    #[diagnostic(code(fs::cannot_exit_replica), url(docsrs))]
47    /// Cannot exit replica.
48    CannotExitReplica,
49    #[error("Cannot delete replica.")]
50    #[diagnostic(code(fs::cannot_delete_replica), url(docsrs))]
51    /// Cannot delete replica.
52    CannotDeleteReplica,
53    #[error("Cannot list replicas.")]
54    #[diagnostic(code(fs::cannot_list_replicas), url(docsrs))]
55    /// Cannot list replicas.
56    CannotListReplicas,
57    #[error("Cannot open replica.")]
58    #[diagnostic(code(fs::cannot_open_replica), url(docsrs))]
59    /// Cannot open replica.
60    CannotOpenReplica,
61    #[error("Cannot list files.")]
62    #[diagnostic(code(fs::cannot_list_files), url(docsrs))]
63    /// Cannot list files.
64    CannotListFiles,
65    #[error("Cannot create or modify file.")]
66    #[diagnostic(code(fs::cannot_create_or_modify_file), url(docsrs))]
67    /// Cannot create or modify file.
68    CannotCreateOrModifyFile,
69    #[error("Cannot delete file.")]
70    #[diagnostic(code(fs::cannot_delete_file), url(docsrs))]
71    /// Cannot delete file.
72    CannotDeleteFile,
73    #[error("Cannot read file.")]
74    #[diagnostic(code(fs::cannot_read_file), url(docsrs))]
75    /// Cannot read file.
76    CannotReadFile,
77    #[error("Cannot delete directory.")]
78    #[diagnostic(code(fs::cannot_delete_directory), url(docsrs))]
79    /// Cannot delete directory.
80    CannotDeleteDirectory,
81    #[error("Cannot share replica as writable when it is read-only ({0}).")]
82    #[diagnostic(code(fs::cannot_share_replica_writable), url(docsrs))]
83    /// Cannot delete directory.
84    CannotShareReplicaWritable(NamespaceId),
85}
86
87#[derive(Error, Debug, Diagnostic)]
88/// Content discovery errors.
89pub enum OkuDiscoveryError {
90    #[error("Problem announcing {0} ({1}).")]
91    #[diagnostic(code(discovery::problem_announcing_content), url(docsrs))]
92    /// Problem announcing content.
93    ProblemAnnouncingContent(String, String),
94    #[error("Cannot generate sharing ticket for replica.")]
95    #[diagnostic(code(discovery::cannot_generate_sharing_ticket), url(docsrs))]
96    /// Cannot generate sharing ticket for replica.
97    CannotGenerateSharingTicket,
98}
99
100#[derive(Error, Debug, Diagnostic)]
101/// FUSE errors.
102pub enum OkuFuseError {
103    #[error("No root in path.")]
104    #[diagnostic(code(fuse::no_root), url(docsrs))]
105    /// No root in path.
106    NoRoot,
107    #[error("No replica with ID {0:?} found locally.")]
108    #[diagnostic(code(fuse::no_replica), url(docsrs))]
109    /// No replica with ID found locally.
110    NoReplica(String),
111    #[error("No file at path {0:?}.")]
112    #[diagnostic(code(fuse::no_file_at_path), url(docsrs))]
113    /// No file at path.
114    NoFileAtPath(PathBuf),
115    #[error("Could not update filesystem handles.")]
116    #[diagnostic(code(fuse::fs_handles_failed_update), url(docsrs))]
117    /// Could not update filesystem handles.
118    FsHandlesFailedUpdate,
119    #[error("No file with handle {0}.")]
120    #[diagnostic(code(fuse::no_file_with_handle), url(docsrs))]
121    /// No file with handle.
122    NoFileWithHandle(u64),
123}