roblox_studio_utils/
result.rs1use std::{error::Error, fmt, io, path::PathBuf};
2
3#[derive(Debug)]
7#[non_exhaustive]
8pub enum RobloxStudioError {
9 UnknownTask(String),
10 UserDocumentsDirMissing,
11 LocalDataDirMissing,
12 LocalDataDirCopyPlace(String),
13 PathCanonicalize(String),
14 PathToString(PathBuf),
15 Io(io::Error),
16}
17
18impl fmt::Display for RobloxStudioError {
19 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
20 match self {
21 RobloxStudioError::UnknownTask(s) => write!(f, "Unknown task: {s}"),
22 RobloxStudioError::UserDocumentsDirMissing => {
23 write!(f, "Failed to find user documents directory")
24 }
25 RobloxStudioError::LocalDataDirMissing => {
26 write!(f, "Failed to find local data directory")
27 }
28 RobloxStudioError::LocalDataDirCopyPlace(s) => {
29 write!(f, "Failed to copy place file to local data directory: {s}")
30 }
31 RobloxStudioError::PathCanonicalize(s) => write!(f, "Failed to canonicalize path: {s}"),
32 RobloxStudioError::PathToString(p) => {
33 write!(f, "Failed to convert path to string: {}", p.display())
34 }
35 RobloxStudioError::Io(e) => write!(f, "I/O error: {e}"),
36 }
37 }
38}
39
40impl Error for RobloxStudioError {
41 fn source(&self) -> Option<&(dyn Error + 'static)> {
42 if let Self::Io(e) = self {
43 Some(e)
44 } else {
45 None
46 }
47 }
48}
49
50impl From<io::Error> for RobloxStudioError {
51 fn from(value: io::Error) -> Self {
52 RobloxStudioError::Io(value)
53 }
54}
55
56pub type RobloxStudioResult<T> = Result<T, RobloxStudioError>;