1313
1414#if __GNUC__ >= 11
1515
16+ #include < map>
1617#include < string>
1718#include < variant>
1819#include < sstream>
2425namespace cyphal ::support::platform::storage
2526{
2627
28+ /* *************************************************************************************
29+ * CONSTANTS
30+ **************************************************************************************/
31+
32+ static std::map<littlefs::Error, Error> const LITTLEFS_TO_STORAGE_ERROR_MAP =
33+ {
34+ {littlefs::Error::IO , Error::IO},
35+ {littlefs::Error::CORRUPT , Error::Internal},
36+ {littlefs::Error::NOENT , Error::Existence},
37+ {littlefs::Error::EXIST , Error::Existence},
38+ {littlefs::Error::NOTDIR , Error::Internal},
39+ {littlefs::Error::ISDIR , Error::API},
40+ {littlefs::Error::NOTEMPTY , Error::API},
41+ {littlefs::Error::BADF , Error::Internal},
42+ {littlefs::Error::FBIG , Error::Internal},
43+ {littlefs::Error::INVAL , Error::API},
44+ {littlefs::Error::NOSPC , Error::API},
45+ {littlefs::Error::NOMEM , Error::Capacity},
46+ {littlefs::Error::NOATTR , Error::API},
47+ {littlefs::Error::NAMETOOLONG , Error::API},
48+ {littlefs::Error::NO_FD_ENTRY , Error::API},
49+ };
50+
2751/* *************************************************************************************
2852 * CTOR/DTOR
2953 **************************************************************************************/
@@ -46,20 +70,16 @@ auto KeyValueStorage_littlefs::get(const std::string_view key, const std::size_t
4670 /* Open the file containing the registry value. */
4771 auto const rc_open = _filesystem.open (key_filename.str (), littlefs::OpenFlag::RDONLY);
4872 if (std::holds_alternative<littlefs::Error>(rc_open))
49- {
50- if (std::get<littlefs::Error>(rc_open) == littlefs::Error::NOENT)
51- return Error::Existence;
52- else
53- return Error::IO;
54- }
73+ return LITTLEFS_TO_STORAGE_ERROR_MAP.at (std::get<littlefs::Error>(rc_open));
74+
5575 littlefs::FileHandle const file_hdl = std::get<littlefs::FileHandle>(rc_open);
5676
5777 /* Read from the file. */
5878 auto const rc_read = _filesystem.read (file_hdl, data, size);
5979 if (std::holds_alternative<littlefs::Error>(rc_read))
6080 {
6181 (void )_filesystem.close (file_hdl);
62- return Error::IO ;
82+ return LITTLEFS_TO_STORAGE_ERROR_MAP. at (std::get<littlefs::Error>(rc_read)) ;
6383 }
6484
6585 (void )_filesystem.close (file_hdl);
@@ -77,7 +97,7 @@ auto KeyValueStorage_littlefs::put(const std::string_view key, const std::size_t
7797 /* Open the file containing the registry value. */
7898 auto const rc_open = _filesystem.open (key_filename.str (), littlefs::OpenFlag::WRONLY | littlefs::OpenFlag::CREAT | littlefs::OpenFlag::TRUNC);
7999 if (std::holds_alternative<littlefs::Error>(rc_open))
80- return Error::IO ;
100+ return LITTLEFS_TO_STORAGE_ERROR_MAP. at (std::get<littlefs::Error>(rc_open)) ;
81101
82102 littlefs::FileHandle const file_hdl = std::get<littlefs::FileHandle>(rc_open);
83103
@@ -86,7 +106,7 @@ auto KeyValueStorage_littlefs::put(const std::string_view key, const std::size_t
86106 if (std::holds_alternative<littlefs::Error>(rc_write))
87107 {
88108 (void )_filesystem.close (file_hdl);
89- return Error::IO ;
109+ return LITTLEFS_TO_STORAGE_ERROR_MAP. at (std::get<littlefs::Error>(rc_write)) ;
90110 }
91111
92112 (void )_filesystem.close (file_hdl);
0 commit comments