Compare commits
	
		
			2 Commits
		
	
	
		
			2ca2002423
			...
			v2.0.7-rel
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 5ab7301cbe | |||
| 87d336141c | 
@@ -17,6 +17,7 @@ bugprone
 | 
				
			|||||||
cflags
 | 
					cflags
 | 
				
			||||||
chrono
 | 
					chrono
 | 
				
			||||||
cmake_current_source_dir
 | 
					cmake_current_source_dir
 | 
				
			||||||
 | 
					coinit_apartmentthreaded
 | 
				
			||||||
comdlg32
 | 
					comdlg32
 | 
				
			||||||
cppcoreguidelines
 | 
					cppcoreguidelines
 | 
				
			||||||
cppdbg
 | 
					cppdbg
 | 
				
			||||||
@@ -27,6 +28,7 @@ cppvsdbg
 | 
				
			|||||||
create_notraverse
 | 
					create_notraverse
 | 
				
			||||||
crypto_aead_xchacha20poly1305_ietf_npubbytes
 | 
					crypto_aead_xchacha20poly1305_ietf_npubbytes
 | 
				
			||||||
cstdint
 | 
					cstdint
 | 
				
			||||||
 | 
					curle_couldnt_resolve_host
 | 
				
			||||||
curlopt_aws_sigv4
 | 
					curlopt_aws_sigv4
 | 
				
			||||||
cxxflags
 | 
					cxxflags
 | 
				
			||||||
cxxstd
 | 
					cxxstd
 | 
				
			||||||
@@ -199,6 +201,7 @@ secp256k1
 | 
				
			|||||||
secur32
 | 
					secur32
 | 
				
			||||||
sfml_project
 | 
					sfml_project
 | 
				
			||||||
shlwapi
 | 
					shlwapi
 | 
				
			||||||
 | 
					sigchld
 | 
				
			||||||
skynet
 | 
					skynet
 | 
				
			||||||
source_subdir
 | 
					source_subdir
 | 
				
			||||||
spdlog
 | 
					spdlog
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,36 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
    "configurations": {
 | 
					 | 
				
			||||||
        "UnixDebug": {
 | 
					 | 
				
			||||||
            "adapter": "vscode-cpptools",
 | 
					 | 
				
			||||||
            "configuration": {
 | 
					 | 
				
			||||||
                "request": "launch",
 | 
					 | 
				
			||||||
                "program": "${workspaceRoot}/build/debug/repertory",
 | 
					 | 
				
			||||||
                "args": ["-f", "/home/sgraves/mnt"],
 | 
					 | 
				
			||||||
                "cwd": "${workspaceRoot}/build/debug",
 | 
					 | 
				
			||||||
                "environment": [],
 | 
					 | 
				
			||||||
                "externalConsole": true,
 | 
					 | 
				
			||||||
                "MIMode": "gdb",
 | 
					 | 
				
			||||||
                "stopAtEntry": true,
 | 
					 | 
				
			||||||
                "logging": {
 | 
					 | 
				
			||||||
                    "engineLogging": false
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "UnixDebugTest": {
 | 
					 | 
				
			||||||
            "adapter": "vscode-cpptools",
 | 
					 | 
				
			||||||
            "configuration": {
 | 
					 | 
				
			||||||
                "request": "launch",
 | 
					 | 
				
			||||||
                "program": "${workspaceRoot}/build/debug/unittests",
 | 
					 | 
				
			||||||
                "args": ["--gtest_filter=file_manager.can_close_after_download_timeout"],
 | 
					 | 
				
			||||||
                "cwd": "${workspaceRoot}/build",
 | 
					 | 
				
			||||||
                "environment": [],
 | 
					 | 
				
			||||||
                "externalConsole": true,
 | 
					 | 
				
			||||||
                "MIMode": "gdb",
 | 
					 | 
				
			||||||
                "stopAtEntry": true,
 | 
					 | 
				
			||||||
                "logging": {
 | 
					 | 
				
			||||||
                    "engineLogging": false
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										30
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -1,7 +1,36 @@
 | 
				
			|||||||
# Changelog
 | 
					# Changelog
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## v2.0.7-release
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Issues
 | 
				
			||||||
 | 
					* \#55 [bug] UI is unable to launch `repertory.exe` on Windows when absolute path contains spaces
 | 
				
			||||||
 | 
					* \#57 [bug] Directory entries . and .. are incorrectly being reported as files in Linux remote mounts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## v2.0.6-release
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Issues
 | 
				
			||||||
 | 
					* \#42 [bug] Remote mount directory listing on Windows connected to Linux is failing
 | 
				
			||||||
 | 
					* \#43 [bug] Directories are not importing properly for Sia
 | 
				
			||||||
 | 
					* \#44 [bug] Windows-to-Linux remote mount ignores `CREATE_NEW`
 | 
				
			||||||
 | 
					* \#45 [bug] Windows-to-Linux remote mount is not handling attempts to remove a non-empty directory properly
 | 
				
			||||||
 | 
					* \#46 [bug] Changes to maximum cache size should be updated live
 | 
				
			||||||
 | 
					* \#47 [bug] Windows-to-Linux remote mount is allowing directory rename when directory is not empty
 | 
				
			||||||
 | 
					* \#48 [bug] Windows-to-Linux remote mount overlapped I/O is not detecting EOF for read operations
 | 
				
			||||||
 | 
					* \#49 [ui] Implement provider test button
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Changes from v2.0.5-rc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Added request retry on `libcurl` error code `CURLE_COULDNT_RESOLVE_HOST`
 | 
				
			||||||
 | 
					* Added `libcurl` DNS caching
 | 
				
			||||||
 | 
					* Drive letters in UI should always be lowercase
 | 
				
			||||||
 | 
					* Fixed WinFSP directory rename for non-empty directories
 | 
				
			||||||
 | 
					* Fixed segfault in UI due to incorrect `SIGCHLD` handling
 | 
				
			||||||
 | 
					* Migrated to v2 error handling
 | 
				
			||||||
 | 
					* Upgraded WinFSP to v2.1 (2025)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## v2.0.5-rc
 | 
					## v2.0.5-rc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- markdownlint-disable-next-line -->
 | 
				
			||||||
### Issues
 | 
					### Issues
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* \#39 Create management portal in Flutter
 | 
					* \#39 Create management portal in Flutter
 | 
				
			||||||
@@ -69,6 +98,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
## v2.0.2-rc
 | 
					## v2.0.2-rc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- markdownlint-disable-next-line -->
 | 
				
			||||||
### BREAKING CHANGES
 | 
					### BREAKING CHANGES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Refactored `config.json` - will need to verify configuration settings prior to mounting
 | 
					* Refactored `config.json` - will need to verify configuration settings prior to mounting
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -48,7 +48,7 @@ on Windows.
 | 
				
			|||||||
* [Sia renterd](https://github.com/SiaFoundation/renterd/releases) v2.0.0+ for Sia support
 | 
					* [Sia renterd](https://github.com/SiaFoundation/renterd/releases) v2.0.0+ for Sia support
 | 
				
			||||||
* Linux requires `fusermount3`; otherwise, `repertory` must be manually compiled with `libfuse2` support
 | 
					* Linux requires `fusermount3`; otherwise, `repertory` must be manually compiled with `libfuse2` support
 | 
				
			||||||
* Windows requires the following dependencies to be installed:
 | 
					* Windows requires the following dependencies to be installed:
 | 
				
			||||||
  * [WinFSP 2023](https://github.com/winfsp/winfsp/releases/download/v2.0/winfsp-2.0.23075.msi)
 | 
					  * [WinFSP 2025](https://github.com/winfsp/winfsp/releases/download/v2.1/winfsp-2.1.25156.msi)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Supported Operating Systems
 | 
					### Supported Operating Systems
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,20 +1,20 @@
 | 
				
			|||||||
set(BINUTILS_HASH b53606f443ac8f01d1d5fc9c39497f2af322d99e14cea5c0b4b124d630379365)
 | 
					set(BINUTILS_HASH ce2017e059d63e67ddb9240e9d4ec49c2893605035cd60e92ad53177f4377237)
 | 
				
			||||||
set(BOOST2_HASH 7bd7ddceec1a1dfdcbdb3e609b60d01739c38390a5f956385a12f3122049f0ca)
 | 
					set(BOOST2_HASH 7bd7ddceec1a1dfdcbdb3e609b60d01739c38390a5f956385a12f3122049f0ca)
 | 
				
			||||||
set(BOOST_HASH f55c340aa49763b1925ccf02b2e83f35fdcf634c9d5164a2acb87540173c741d)
 | 
					set(BOOST_HASH 3621533e820dcab1e8012afd583c0c73cf0f77694952b81352bf38c1488f9cb4)
 | 
				
			||||||
set(CPP_HTTPLIB_HASH c9b9e0524666e1cd088f0874c57c1ce7c0eaa8552f9f4e15c755d5201fc8c608)
 | 
					set(CPP_HTTPLIB_HASH 410a1347ed6bcbcc4a19af8ed8ad3873fe9fa97731d52db845c4c78f3f9c31e6)
 | 
				
			||||||
set(CURL_HASH 6edc063d1ebaf9cf3b3b46e9fef2f3cd8932694989ecd43d005d6e828426d09f)
 | 
					set(CURL_HASH 2937cadde007aa3a52a17c21ac9153ea054700f37926d1d96602bf07e888c847)
 | 
				
			||||||
set(EXPAT_HASH 372b18f6527d162fa9658f1c74d22a37429b82d822f5a1e1fc7e00f6045a06a2)
 | 
					set(EXPAT_HASH 85372797ff0673a8fc4a6be16466bb5a0ca28c0dcf3c6f7ac1686b4a3ba2aabb)
 | 
				
			||||||
set(GCC_HASH 7d376d445f93126dc545e2c0086d0f647c3094aae081cdb78f42ce2bc25e7293)
 | 
					set(GCC_HASH 51b9919ea69c980d7a381db95d4be27edf73b21254eb13d752a08003b4d013b1)
 | 
				
			||||||
set(GTEST_HASH 78c676fc63881529bf97bf9d45948d905a66833fbfa5318ea2cd7478cb98f399)
 | 
					set(GTEST_HASH 65fab701d9829d38cb77c14acdc431d2108bfdbf8979e40eb8ae567edf10b27c)
 | 
				
			||||||
set(ICU_HASH a2c443404f00098e9e90acf29dc318e049d2dc78d9ae5f46efb261934a730ce2)
 | 
					set(ICU_HASH a2c443404f00098e9e90acf29dc318e049d2dc78d9ae5f46efb261934a730ce2)
 | 
				
			||||||
set(JSON_HASH 0d8ef5af7f9794e3263480193c491549b2ba6cc74bb018906202ada498a79406)
 | 
					set(JSON_HASH 4b92eb0c06d10683f7447ce9406cb97cd4b453be18d7279320f7b2f025c10187)
 | 
				
			||||||
set(LIBSODIUM_HASH 8e5aeca07a723a27bbecc3beef14b0068d37e7fc0e97f51b3f1c82d2a58005c1)
 | 
					set(LIBSODIUM_HASH 8e5aeca07a723a27bbecc3beef14b0068d37e7fc0e97f51b3f1c82d2a58005c1)
 | 
				
			||||||
set(MINGW_HASH cc41898aac4b6e8dd5cffd7331b9d9515b912df4420a3a612b5ea2955bbeed2f)
 | 
					set(MINGW_HASH 5afe822af5c4edbf67daaf45eec61d538f49eef6b19524de64897c6b95828caf)
 | 
				
			||||||
set(OPENSSL_HASH 002a2d6b30b58bf4bea46c43bdd96365aaf8daa6c428782aa4feee06da197df3)
 | 
					set(OPENSSL_HASH 529043b15cffa5f36077a4d0af83f3de399807181d607441d734196d889b641f)
 | 
				
			||||||
set(PKG_CONFIG_HASH 6fc69c01688c9458a57eb9a1664c9aba372ccda420a02bf4429fe610e7e7d591)
 | 
					set(PKG_CONFIG_HASH 6fc69c01688c9458a57eb9a1664c9aba372ccda420a02bf4429fe610e7e7d591)
 | 
				
			||||||
set(PUGIXML_HASH 655ade57fa703fb421c2eb9a0113b5064bddb145d415dd1f88c79353d90d511a)
 | 
					set(PUGIXML_HASH 655ade57fa703fb421c2eb9a0113b5064bddb145d415dd1f88c79353d90d511a)
 | 
				
			||||||
set(ROCKSDB_HASH fdccab16133c9d927a183c2648bcea8d956fb41eb1df2aacaa73eb0b95e43724)
 | 
					set(ROCKSDB_HASH afccfab496556904900afacf7d99887f1d50cb893e5d2288bd502db233adacac)
 | 
				
			||||||
set(SPDLOG_HASH 25c843860f039a1600f232c6eb9e01e6627f7d030a2ae5e232bdd3c9205d26cc)
 | 
					set(SPDLOG_HASH 15a04e69c222eb6c01094b5c7ff8a249b36bb22788d72519646fb85feb267e67)
 | 
				
			||||||
set(SQLITE_HASH 6cebd1d8403fc58c30e93939b246f3e6e58d0765a5cd50546f16c00fd805d2c3)
 | 
					set(SQLITE_HASH 9ad6d16cbc1df7cd55c8b55127c82a9bca5e9f287818de6dc87e04e73599d754)
 | 
				
			||||||
set(STDUUID_HASH b1176597e789531c38481acbbed2a6894ad419aab0979c10410d59eb0ebf40d3)
 | 
					set(STDUUID_HASH b1176597e789531c38481acbbed2a6894ad419aab0979c10410d59eb0ebf40d3)
 | 
				
			||||||
set(ZLIB_HASH 17e88863f3600672ab49182f217281b6fc4d3c762bde361935e436a95214d05c)
 | 
					set(ZLIB_HASH 17e88863f3600672ab49182f217281b6fc4d3c762bde361935e436a95214d05c)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,9 +2,9 @@ if(PROJECT_ENABLE_WINFSP AND PROJECT_IS_MINGW)
 | 
				
			|||||||
  if(PROJECT_BUILD) 
 | 
					  if(PROJECT_BUILD) 
 | 
				
			||||||
    add_definitions(-DPROJECT_ENABLE_WINFSP)
 | 
					    add_definitions(-DPROJECT_ENABLE_WINFSP)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    include_directories(BEFORE SYSTEM ${PROJECT_3RD_PARTY_DIR}/winfsp-2.0/inc)
 | 
					    include_directories(BEFORE SYSTEM ${PROJECT_3RD_PARTY_DIR}/winfsp-2.1/inc)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    link_directories(BEFORE ${PROJECT_3RD_PARTY_DIR}/winfsp-2.0/lib)
 | 
					    link_directories(BEFORE ${PROJECT_3RD_PARTY_DIR}/winfsp-2.1/lib)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(PROJECT_IS_ARM64)
 | 
					    if(PROJECT_IS_ARM64)
 | 
				
			||||||
      link_libraries(winfsp-a64)
 | 
					      link_libraries(winfsp-a64)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,28 +1,27 @@
 | 
				
			|||||||
set(BINUTILS_VERSION 2.43)
 | 
					set(BINUTILS_VERSION 2.44)
 | 
				
			||||||
set(BOOST2_MAJOR_VERSION 1)
 | 
					set(BOOST2_MAJOR_VERSION 1)
 | 
				
			||||||
set(BOOST2_MINOR_VERSION 76)
 | 
					set(BOOST2_MINOR_VERSION 76)
 | 
				
			||||||
set(BOOST2_PATCH_VERSION 0)
 | 
					set(BOOST2_PATCH_VERSION 0)
 | 
				
			||||||
set(BOOST_MAJOR_VERSION 1)
 | 
					set(BOOST_MAJOR_VERSION 1)
 | 
				
			||||||
set(BOOST_MINOR_VERSION 87)
 | 
					set(BOOST_MINOR_VERSION 88)
 | 
				
			||||||
set(BOOST_PATCH_VERSION 0)
 | 
					set(BOOST_PATCH_VERSION 0)
 | 
				
			||||||
set(CPP_HTTPLIB_VERSION 0.19.0)
 | 
					set(CPP_HTTPLIB_VERSION 0.23.1)
 | 
				
			||||||
set(CURL2_VERSION 8_12_1)
 | 
					set(CURL2_VERSION 8_15_0)
 | 
				
			||||||
set(CURL_VERSION 8.12.1)
 | 
					set(CURL_VERSION 8.15.0)
 | 
				
			||||||
set(EXPAT2_VERSION 2_6_4)
 | 
					set(EXPAT2_VERSION 2_7_1)
 | 
				
			||||||
set(EXPAT_VERSION 2.6.4)
 | 
					set(EXPAT_VERSION 2.7.1)
 | 
				
			||||||
set(GCC_VERSION 14.2.0)
 | 
					set(GCC_VERSION 15.1.0)
 | 
				
			||||||
set(GTEST_VERSION 1.16.0)
 | 
					set(GTEST_VERSION 1.17.0)
 | 
				
			||||||
set(ICU_VERSION 76-1)
 | 
					set(ICU_VERSION 76-1)
 | 
				
			||||||
set(JSON_VERSION 3.11.3)
 | 
					set(JSON_VERSION 3.12.0)
 | 
				
			||||||
set(LIBSODIUM_VERSION 1.0.20)
 | 
					set(LIBSODIUM_VERSION 1.0.20)
 | 
				
			||||||
set(MESA_VERSION 23.3.3)
 | 
					set(MINGW_VERSION 13.0.0)
 | 
				
			||||||
set(MINGW_VERSION 12.0.0)
 | 
					set(OPENSSL_VERSION 3.5.1)
 | 
				
			||||||
set(OPENSSL_VERSION 3.4.1)
 | 
					 | 
				
			||||||
set(PKG_CONFIG_VERSION 0.29.2)
 | 
					set(PKG_CONFIG_VERSION 0.29.2)
 | 
				
			||||||
set(PUGIXML_VERSION 1.15)
 | 
					set(PUGIXML_VERSION 1.15)
 | 
				
			||||||
set(ROCKSDB_VERSION 9.10.0)
 | 
					set(ROCKSDB_VERSION 10.4.2)
 | 
				
			||||||
set(SPDLOG_VERSION 1.15.1)
 | 
					set(SPDLOG_VERSION 1.15.3)
 | 
				
			||||||
set(SQLITE2_VERSION 3.49.1)
 | 
					set(SQLITE2_VERSION 3.50.3)
 | 
				
			||||||
set(SQLITE_VERSION 3490100)
 | 
					set(SQLITE_VERSION 3500300)
 | 
				
			||||||
set(STDUUID_VERSION 1.2.3)
 | 
					set(STDUUID_VERSION 1.2.3)
 | 
				
			||||||
set(ZLIB_VERSION 1.3.1)
 | 
					set(ZLIB_VERSION 1.3.1)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,9 +10,9 @@ PROJECT_DESC="Mount utility for Sia and S3"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
PROJECT_MAJOR_VERSION=2
 | 
					PROJECT_MAJOR_VERSION=2
 | 
				
			||||||
PROJECT_MINOR_VERSION=0
 | 
					PROJECT_MINOR_VERSION=0
 | 
				
			||||||
PROJECT_REVISION_VERSION=5
 | 
					PROJECT_REVISION_VERSION=7
 | 
				
			||||||
PROJECT_RELEASE_NUM=0
 | 
					PROJECT_RELEASE_NUM=1
 | 
				
			||||||
PROJECT_RELEASE_ITER=rc
 | 
					PROJECT_RELEASE_ITER=release
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PROJECT_APP_LIST=(${PROJECT_NAME})
 | 
					PROJECT_APP_LIST=(${PROJECT_NAME})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -21,6 +21,7 @@ PROJECT_PUBLIC_KEY=${DEVELOPER_PUBLIC_KEY}
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
PROJECT_FLUTTER_BASE_HREF="/ui/"
 | 
					PROJECT_FLUTTER_BASE_HREF="/ui/"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PROJECT_ENABLE_V2_ERRORS=ON
 | 
				
			||||||
PROJECT_ENABLE_WIN32_LONG_PATH_NAMES=OFF
 | 
					PROJECT_ENABLE_WIN32_LONG_PATH_NAMES=OFF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PROJECT_ENABLE_BACKWARD_CPP=OFF
 | 
					PROJECT_ENABLE_BACKWARD_CPP=OFF
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
#comment
 | 
					#comment
 | 
				
			||||||
FROM         arm64v8/alpine:3.21.3
 | 
					FROM         arm64v8/alpine:3.21.4
 | 
				
			||||||
MAINTAINER   Scott E. Graves <scott.e.graves@protonmail.com>
 | 
					MAINTAINER   Scott E. Graves <scott.e.graves@protonmail.com>
 | 
				
			||||||
CMD          bash
 | 
					CMD          bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
#comment
 | 
					#comment
 | 
				
			||||||
FROM         alpine:3.21.3
 | 
					FROM         alpine:3.21.4
 | 
				
			||||||
MAINTAINER   Scott E. Graves <scott.e.graves@protonmail.com>
 | 
					MAINTAINER   Scott E. Graves <scott.e.graves@protonmail.com>
 | 
				
			||||||
CMD          bash
 | 
					CMD          bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
#comment
 | 
					#comment
 | 
				
			||||||
FROM alpine:3.21.3
 | 
					FROM alpine:3.21.4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RUN apk update
 | 
					RUN apk update
 | 
				
			||||||
RUN apk upgrade
 | 
					RUN apk upgrade
 | 
				
			||||||
@@ -351,9 +351,9 @@ RUN cd /3rd_party/mingw64 && sha256sum -c ./expat-${MY_EXPAT_VERSION}.tar.gz.sha
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
ARG FONTCONFIG_VERSION
 | 
					ARG FONTCONFIG_VERSION
 | 
				
			||||||
ENV MY_FONTCONFIG_VERSION=${FONTCONFIG_VERSION}
 | 
					ENV MY_FONTCONFIG_VERSION=${FONTCONFIG_VERSION}
 | 
				
			||||||
RUN if [ -f "/3rd_party/fontconfig-${MY_FONTCONFIG_VERSION}.tar.gz" ]; then \
 | 
					RUN if [ -f "/3rd_party/fontconfig-${MY_FONTCONFIG_VERSION}.tar.xz" ]; then \
 | 
				
			||||||
      cd /3rd_party && sha256sum -c ./fontconfig-${MY_FONTCONFIG_VERSION}.tar.gz.sha256 && cd - \
 | 
					      cd /3rd_party && sha256sum -c ./fontconfig-${MY_FONTCONFIG_VERSION}.tar.xz.sha256 && cd - \
 | 
				
			||||||
      && tar xvzf /3rd_party/fontconfig-${MY_FONTCONFIG_VERSION}.tar.gz \
 | 
					      && tar xvJf /3rd_party/fontconfig-${MY_FONTCONFIG_VERSION}.tar.xz \
 | 
				
			||||||
      && cd fontconfig-${MY_FONTCONFIG_VERSION} \
 | 
					      && cd fontconfig-${MY_FONTCONFIG_VERSION} \
 | 
				
			||||||
      && meson setup \
 | 
					      && meson setup \
 | 
				
			||||||
        --cross-file ${MY_TOOLCHAIN_FILE_MESON} \
 | 
					        --cross-file ${MY_TOOLCHAIN_FILE_MESON} \
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,6 +23,7 @@
 | 
				
			|||||||
#define REPERTORY_INCLUDE_COMM_CURL_CURL_COMM_HPP_
 | 
					#define REPERTORY_INCLUDE_COMM_CURL_CURL_COMM_HPP_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "app_config.hpp"
 | 
					#include "app_config.hpp"
 | 
				
			||||||
 | 
					#include "comm/curl/curl_shared.hpp"
 | 
				
			||||||
#include "comm/curl/multi_request.hpp"
 | 
					#include "comm/curl/multi_request.hpp"
 | 
				
			||||||
#include "comm/i_http_comm.hpp"
 | 
					#include "comm/i_http_comm.hpp"
 | 
				
			||||||
#include "events/event_system.hpp"
 | 
					#include "events/event_system.hpp"
 | 
				
			||||||
@@ -48,14 +49,12 @@ private:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  static const write_callback write_data;
 | 
					  static const write_callback write_data;
 | 
				
			||||||
  static const write_callback write_headers;
 | 
					  static const write_callback write_headers;
 | 
				
			||||||
 | 
					  static constexpr std::uint8_t retry_request_count{5U};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
  std::optional<host_config> host_config_;
 | 
					  std::optional<host_config> host_config_;
 | 
				
			||||||
  std::optional<s3_config> s3_config_;
 | 
					  std::optional<s3_config> s3_config_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					 | 
				
			||||||
  bool use_s3_path_style_{false};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  [[nodiscard]] static auto create_curl() -> CURL *;
 | 
					  [[nodiscard]] static auto create_curl() -> CURL *;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -67,8 +66,7 @@ public:
 | 
				
			|||||||
                                          const host_config &cfg)
 | 
					                                          const host_config &cfg)
 | 
				
			||||||
      -> std::string;
 | 
					      -> std::string;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] static auto create_host_config(const s3_config &cfg,
 | 
					  [[nodiscard]] static auto create_host_config(const s3_config &cfg)
 | 
				
			||||||
                                               bool use_s3_path_style)
 | 
					 | 
				
			||||||
      -> host_config;
 | 
					      -> host_config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] static auto url_encode(CURL *curl, const std::string &data,
 | 
					  [[nodiscard]] static auto url_encode(CURL *curl, const std::string &data,
 | 
				
			||||||
@@ -139,6 +137,8 @@ public:
 | 
				
			|||||||
               long &response_code, stop_type &stop_requested) -> bool {
 | 
					               long &response_code, stop_type &stop_requested) -> bool {
 | 
				
			||||||
    REPERTORY_USES_FUNCTION_NAME();
 | 
					    REPERTORY_USES_FUNCTION_NAME();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    CURLcode curl_code{};
 | 
				
			||||||
 | 
					    const auto do_request = [&]() -> bool {
 | 
				
			||||||
      if (request.decryption_token.has_value() &&
 | 
					      if (request.decryption_token.has_value() &&
 | 
				
			||||||
          not request.decryption_token.value().empty()) {
 | 
					          not request.decryption_token.value().empty()) {
 | 
				
			||||||
        return make_encrypted_request(cfg, request, response_code,
 | 
					        return make_encrypted_request(cfg, request, response_code,
 | 
				
			||||||
@@ -212,12 +212,14 @@ public:
 | 
				
			|||||||
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header_list);
 | 
					        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header_list);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      curl_shared::set_share(curl);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      auto url = construct_url(curl, request.get_path(), cfg) + parameters;
 | 
					      auto url = construct_url(curl, request.get_path(), cfg) + parameters;
 | 
				
			||||||
      curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
 | 
					      curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      multi_request curl_request(curl, stop_requested);
 | 
					      multi_request curl_request(curl, stop_requested);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    CURLcode curl_code{};
 | 
					      curl_code = CURLE_OK;
 | 
				
			||||||
      curl_request.get_result(curl_code, response_code);
 | 
					      curl_request.get_result(curl_code, response_code);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if (header_list != nullptr) {
 | 
					      if (header_list != nullptr) {
 | 
				
			||||||
@@ -226,7 +228,7 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      if (curl_code != CURLE_OK) {
 | 
					      if (curl_code != CURLE_OK) {
 | 
				
			||||||
        event_system::instance().raise<curl_error>(curl_code, function_name,
 | 
					        event_system::instance().raise<curl_error>(curl_code, function_name,
 | 
				
			||||||
                                                  url);
 | 
					                                                   request.get_type(), url);
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -235,11 +237,28 @@ public:
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      return true;
 | 
					      return true;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bool ret{false};
 | 
				
			||||||
 | 
					    for (std::uint8_t retry = 0U; !ret && retry < retry_request_count;
 | 
				
			||||||
 | 
					         ++retry) {
 | 
				
			||||||
 | 
					      ret = do_request();
 | 
				
			||||||
 | 
					      if (ret) {
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (curl_code == CURLE_COULDNT_RESOLVE_HOST) {
 | 
				
			||||||
 | 
					        std::this_thread::sleep_for(1s);
 | 
				
			||||||
 | 
					        continue;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return ret;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  void enable_s3_path_style(bool enable) override;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  [[nodiscard]] auto make_request(const curl::requests::http_delete &del,
 | 
					  [[nodiscard]] auto make_request(const curl::requests::http_delete &del,
 | 
				
			||||||
                                  long &response_code,
 | 
					                                  long &response_code,
 | 
				
			||||||
                                  stop_type &stop_requested) const
 | 
					                                  stop_type &stop_requested) const
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										67
									
								
								repertory/librepertory/include/comm/curl/curl_shared.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								repertory/librepertory/include/comm/curl/curl_shared.hpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					  Copyright <2018-2025> <scott.e.graves@protonmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
				
			||||||
 | 
					  of this software and associated documentation files (the "Software"), to deal
 | 
				
			||||||
 | 
					  in the Software without restriction, including without limitation the rights
 | 
				
			||||||
 | 
					  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
				
			||||||
 | 
					  copies of the Software, and to permit persons to whom the Software is
 | 
				
			||||||
 | 
					  furnished to do so, subject to the following conditions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  The above copyright notice and this permission notice shall be included in all
 | 
				
			||||||
 | 
					  copies or substantial portions of the Software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
				
			||||||
 | 
					  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
				
			||||||
 | 
					  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
				
			||||||
 | 
					  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
				
			||||||
 | 
					  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
				
			||||||
 | 
					  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
				
			||||||
 | 
					  SOFTWARE.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					#ifndef REPERTORY_INCLUDE_COMM_CURL_CURL_SHARED_HPP_
 | 
				
			||||||
 | 
					#define REPERTORY_INCLUDE_COMM_CURL_CURL_SHARED_HPP_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace repertory {
 | 
				
			||||||
 | 
					class curl_shared final {
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					  struct curl_sh_deleter final {
 | 
				
			||||||
 | 
					    void operator()(CURLSH *ptr) {
 | 
				
			||||||
 | 
					      if (ptr != nullptr) {
 | 
				
			||||||
 | 
					        curl_share_cleanup(ptr);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  using curl_sh_t = std::unique_ptr<CURLSH, curl_sh_deleter>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					  curl_shared() = delete;
 | 
				
			||||||
 | 
					  curl_shared(const curl_shared &) = delete;
 | 
				
			||||||
 | 
					  curl_shared(curl_shared &&) = delete;
 | 
				
			||||||
 | 
					  ~curl_shared() = delete;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  auto operator=(const curl_shared &) -> curl_shared & = delete;
 | 
				
			||||||
 | 
					  auto operator=(curl_shared &&) -> curl_shared & = delete;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					  static curl_sh_t cache_;
 | 
				
			||||||
 | 
					  static std::recursive_mutex mtx_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					  static void lock_callback(CURL * /* curl */, curl_lock_data /* data */,
 | 
				
			||||||
 | 
					                            curl_lock_access /* access */, void * /* ptr */);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static void unlock_callback(CURL * /* curl */, curl_lock_data /* data */,
 | 
				
			||||||
 | 
					                              curl_lock_access /* access */, void * /* ptr */);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					  static void cleanup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] static auto init() -> bool;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static void set_share(CURL *curl);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					} // namespace repertory
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // REPERTORY_INCLUDE_COMM_CURL_DNS_CACHE_HPP_
 | 
				
			||||||
@@ -26,11 +26,13 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace repertory::curl::requests {
 | 
					namespace repertory::curl::requests {
 | 
				
			||||||
struct http_delete final : http_request_base {
 | 
					struct http_delete final : http_request_base {
 | 
				
			||||||
  ~http_delete() override = default;
 | 
					  [[nodiscard]] auto get_type() const -> std::string override {
 | 
				
			||||||
 | 
					    return "delete";
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto set_method(CURL *curl,
 | 
				
			||||||
  set_method(CURL *curl,
 | 
					                                stop_type & /* stop_requested */) const
 | 
				
			||||||
             stop_type & /* stop_requested */) const -> bool override {
 | 
					      -> bool override {
 | 
				
			||||||
    curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
 | 
					    curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,9 +33,11 @@ struct http_get final : http_request_base {
 | 
				
			|||||||
  auto operator=(http_get &&) -> http_get & = default;
 | 
					  auto operator=(http_get &&) -> http_get & = default;
 | 
				
			||||||
  ~http_get() override = default;
 | 
					  ~http_get() override = default;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto get_type() const -> std::string override { return "get"; }
 | 
				
			||||||
  set_method(CURL *curl,
 | 
					
 | 
				
			||||||
             stop_type & /*stop_requested*/) const -> bool override {
 | 
					  [[nodiscard]] auto set_method(CURL *curl,
 | 
				
			||||||
 | 
					                                stop_type & /*stop_requested*/) const
 | 
				
			||||||
 | 
					      -> bool override {
 | 
				
			||||||
    curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
 | 
					    curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,11 +26,11 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace repertory::curl::requests {
 | 
					namespace repertory::curl::requests {
 | 
				
			||||||
struct http_head final : http_request_base {
 | 
					struct http_head final : http_request_base {
 | 
				
			||||||
  ~http_head() override = default;
 | 
					  [[nodiscard]] auto get_type() const -> std::string override { return "head"; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto set_method(CURL *curl,
 | 
				
			||||||
  set_method(CURL *curl,
 | 
					                                stop_type & /* stop_requested */) const
 | 
				
			||||||
             stop_type & /* stop_requested */) const -> bool override {
 | 
					      -> bool override {
 | 
				
			||||||
    curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "HEAD");
 | 
					    curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "HEAD");
 | 
				
			||||||
    curl_easy_setopt(curl, CURLOPT_NOBODY, 1L);
 | 
					    curl_easy_setopt(curl, CURLOPT_NOBODY, 1L);
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,16 +26,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace repertory::curl::requests {
 | 
					namespace repertory::curl::requests {
 | 
				
			||||||
struct http_post final : http_request_base {
 | 
					struct http_post final : http_request_base {
 | 
				
			||||||
  http_post() = default;
 | 
					 | 
				
			||||||
  http_post(const http_post &) = default;
 | 
					 | 
				
			||||||
  http_post(http_post &&) = default;
 | 
					 | 
				
			||||||
  auto operator=(const http_post &) -> http_post & = default;
 | 
					 | 
				
			||||||
  auto operator=(http_post &&) -> http_post & = default;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  ~http_post() override = default;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  std::optional<nlohmann::json> json;
 | 
					  std::optional<nlohmann::json> json;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] auto get_type() const -> std::string override { return "post"; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto set_method(CURL *curl,
 | 
					  [[nodiscard]] auto set_method(CURL *curl,
 | 
				
			||||||
                                stop_type & /*stop_requested*/) const
 | 
					                                stop_type & /*stop_requested*/) const
 | 
				
			||||||
      -> bool override;
 | 
					      -> bool override;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,18 +27,11 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace repertory::curl::requests {
 | 
					namespace repertory::curl::requests {
 | 
				
			||||||
struct http_put_file final : http_request_base {
 | 
					struct http_put_file final : http_request_base {
 | 
				
			||||||
  http_put_file() = default;
 | 
					 | 
				
			||||||
  http_put_file(const http_put_file &) = default;
 | 
					 | 
				
			||||||
  http_put_file(http_put_file &&) = default;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  auto operator=(const http_put_file &) -> http_put_file & = default;
 | 
					 | 
				
			||||||
  auto operator=(http_put_file &&) -> http_put_file & = default;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  ~http_put_file() override = default;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  std::shared_ptr<utils::encryption::encrypting_reader> reader;
 | 
					  std::shared_ptr<utils::encryption::encrypting_reader> reader;
 | 
				
			||||||
  std::string source_path;
 | 
					  std::string source_path;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] auto get_type() const -> std::string override { return "put"; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto set_method(CURL *curl, stop_type &stop_requested) const
 | 
					  [[nodiscard]] auto set_method(CURL *curl, stop_type &stop_requested) const
 | 
				
			||||||
      -> bool override;
 | 
					      -> bool override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -61,6 +61,8 @@ struct http_request_base {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto get_path() const -> std::string { return path; }
 | 
					  [[nodiscard]] virtual auto get_path() const -> std::string { return path; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] virtual auto get_type() const -> std::string = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto set_method(CURL *curl,
 | 
					  [[nodiscard]] virtual auto set_method(CURL *curl,
 | 
				
			||||||
                                        stop_type &stop_requested) const
 | 
					                                        stop_type &stop_requested) const
 | 
				
			||||||
      -> bool = 0;
 | 
					      -> bool = 0;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,28 +34,29 @@ struct i_http_comm {
 | 
				
			|||||||
  INTERFACE_SETUP(i_http_comm);
 | 
					  INTERFACE_SETUP(i_http_comm);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  virtual void enable_s3_path_style(bool enable) = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto
 | 
				
			||||||
  make_request(const curl::requests::http_delete &del, long &response_code,
 | 
					  make_request(const curl::requests::http_delete &del, long &response_code,
 | 
				
			||||||
               stop_type &stop_requested) const -> bool = 0;
 | 
					               stop_type &stop_requested) const -> bool = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto make_request(const curl::requests::http_get &get,
 | 
				
			||||||
  make_request(const curl::requests::http_get &get, long &response_code,
 | 
					                                          long &response_code,
 | 
				
			||||||
               stop_type &stop_requested) const -> bool = 0;
 | 
					                                          stop_type &stop_requested) const
 | 
				
			||||||
 | 
					      -> bool = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto make_request(const curl::requests::http_head &head,
 | 
				
			||||||
  make_request(const curl::requests::http_head &head, long &response_code,
 | 
					                                          long &response_code,
 | 
				
			||||||
               stop_type &stop_requested) const -> bool = 0;
 | 
					                                          stop_type &stop_requested) const
 | 
				
			||||||
 | 
					      -> bool = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto make_request(const curl::requests::http_post &post,
 | 
				
			||||||
  make_request(const curl::requests::http_post &post, long &response_code,
 | 
					                                          long &response_code,
 | 
				
			||||||
               stop_type &stop_requested) const -> bool = 0;
 | 
					                                          stop_type &stop_requested) const
 | 
				
			||||||
 | 
					      -> bool = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto
 | 
				
			||||||
  make_request(const curl::requests::http_put_file &put_file,
 | 
					  make_request(const curl::requests::http_put_file &put_file,
 | 
				
			||||||
               long &response_code,
 | 
					               long &response_code, stop_type &stop_requested) const
 | 
				
			||||||
               stop_type &stop_requested) const -> bool = 0;
 | 
					      -> bool = 0;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
} // namespace repertory
 | 
					} // namespace repertory
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -94,7 +94,7 @@ private:
 | 
				
			|||||||
  bool shutdown_ = false;
 | 
					  bool shutdown_ = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
  static constexpr const auto min_pool_size = 10U;
 | 
					  static constexpr auto min_pool_size = 10U;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  void execute(const std::string &client_id, std::uint64_t thread_id,
 | 
					  void execute(const std::string &client_id, std::uint64_t thread_id,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -54,12 +54,13 @@ REPERTORY_IGNORE_WARNINGS_DISABLE()
 | 
				
			|||||||
using namespace std::chrono_literals;
 | 
					using namespace std::chrono_literals;
 | 
				
			||||||
using json = nlohmann::json;
 | 
					using json = nlohmann::json;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
inline constexpr const std::string_view REPERTORY = "repertory";
 | 
					inline constexpr std::string_view REPERTORY{"repertory"};
 | 
				
			||||||
inline constexpr const std::wstring_view REPERTORY_W = L"repertory";
 | 
					inline constexpr std::string_view REPERTORY_DATA_NAME{"repertory2"};
 | 
				
			||||||
 | 
					inline constexpr std::wstring_view REPERTORY_W{L"repertory"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
inline constexpr const std::uint64_t REPERTORY_CONFIG_VERSION = 2ULL;
 | 
					inline constexpr std::uint64_t REPERTORY_CONFIG_VERSION{2ULL};
 | 
				
			||||||
inline constexpr const std::string_view REPERTORY_DATA_NAME = "repertory2";
 | 
					inline constexpr std::string_view REPERTORY_MIN_REMOTE_VERSION{"2.0.0"};
 | 
				
			||||||
inline constexpr const std::string_view REPERTORY_MIN_REMOTE_VERSION = "2.0.0";
 | 
					inline constexpr std::string_view RENTERD_MIN_VERSION{"2.0.0"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define REPERTORY_INVALID_HANDLE INVALID_HANDLE_VALUE
 | 
					#define REPERTORY_INVALID_HANDLE INVALID_HANDLE_VALUE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -221,11 +222,11 @@ using WCHAR = wchar_t;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define MAX_PATH 260
 | 
					#define MAX_PATH 260
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define STATUS_SUCCESS std::uint32_t{0U}
 | 
					 | 
				
			||||||
#define STATUS_ACCESS_DENIED std::uint32_t{0xC0000022L}
 | 
					#define STATUS_ACCESS_DENIED std::uint32_t{0xC0000022L}
 | 
				
			||||||
#define STATUS_DEVICE_BUSY std::uint32_t{0x80000011L}
 | 
					#define STATUS_DEVICE_BUSY std::uint32_t{0x80000011L}
 | 
				
			||||||
#define STATUS_DEVICE_INSUFFICIENT_RESOURCES std::uint32_t{0xC0000468L}
 | 
					#define STATUS_DEVICE_INSUFFICIENT_RESOURCES std::uint32_t{0xC0000468L}
 | 
				
			||||||
#define STATUS_DIRECTORY_NOT_EMPTY std::uint32_t{0xC0000101L}
 | 
					#define STATUS_DIRECTORY_NOT_EMPTY std::uint32_t{0xC0000101L}
 | 
				
			||||||
 | 
					#define STATUS_END_OF_FILE std::uint32_t{0xC0000011L}
 | 
				
			||||||
#define STATUS_FILE_IS_A_DIRECTORY std::uint32_t{0xC00000BAL}
 | 
					#define STATUS_FILE_IS_A_DIRECTORY std::uint32_t{0xC00000BAL}
 | 
				
			||||||
#define STATUS_FILE_TOO_LARGE std::uint32_t{0xC0000904L}
 | 
					#define STATUS_FILE_TOO_LARGE std::uint32_t{0xC0000904L}
 | 
				
			||||||
#define STATUS_INSUFFICIENT_RESOURCES std::uint32_t{0xC000009AL}
 | 
					#define STATUS_INSUFFICIENT_RESOURCES std::uint32_t{0xC000009AL}
 | 
				
			||||||
@@ -234,11 +235,13 @@ using WCHAR = wchar_t;
 | 
				
			|||||||
#define STATUS_INVALID_HANDLE std::uint32_t{0xC0000006L}
 | 
					#define STATUS_INVALID_HANDLE std::uint32_t{0xC0000006L}
 | 
				
			||||||
#define STATUS_INVALID_IMAGE_FORMAT std::uint32_t{0xC000007BL}
 | 
					#define STATUS_INVALID_IMAGE_FORMAT std::uint32_t{0xC000007BL}
 | 
				
			||||||
#define STATUS_INVALID_PARAMETER std::uint32_t{0xC000000DL}
 | 
					#define STATUS_INVALID_PARAMETER std::uint32_t{0xC000000DL}
 | 
				
			||||||
#define STATUS_NO_MEMORY std::uint32_t{0xC0000017L}
 | 
					 | 
				
			||||||
#define STATUS_NOT_IMPLEMENTED std::uint32_t{0xC0000002L}
 | 
					#define STATUS_NOT_IMPLEMENTED std::uint32_t{0xC0000002L}
 | 
				
			||||||
 | 
					#define STATUS_NO_MEMORY std::uint32_t{0xC0000017L}
 | 
				
			||||||
 | 
					#define STATUS_OBJECT_NAME_COLLISION std::uint32_t{0xC0000035L}
 | 
				
			||||||
#define STATUS_OBJECT_NAME_EXISTS std::uint32_t{0x40000000L}
 | 
					#define STATUS_OBJECT_NAME_EXISTS std::uint32_t{0x40000000L}
 | 
				
			||||||
#define STATUS_OBJECT_NAME_NOT_FOUND std::uint32_t{0xC0000034L}
 | 
					#define STATUS_OBJECT_NAME_NOT_FOUND std::uint32_t{0xC0000034L}
 | 
				
			||||||
#define STATUS_OBJECT_PATH_INVALID std::uint32_t{0xC0000039L}
 | 
					#define STATUS_OBJECT_PATH_INVALID std::uint32_t{0xC0000039L}
 | 
				
			||||||
 | 
					#define STATUS_SUCCESS std::uint32_t{0U}
 | 
				
			||||||
#define STATUS_UNEXPECTED_IO_ERROR std::uint32_t{0xC00000E9L}
 | 
					#define STATUS_UNEXPECTED_IO_ERROR std::uint32_t{0xC00000E9L}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CONVERT_STATUS_NOT_IMPLEMENTED(e)                                      \
 | 
					#define CONVERT_STATUS_NOT_IMPLEMENTED(e)                                      \
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,14 +50,14 @@ public:
 | 
				
			|||||||
  [[nodiscard]] auto fill_buffer(const remote::file_offset &offset,
 | 
					  [[nodiscard]] auto fill_buffer(const remote::file_offset &offset,
 | 
				
			||||||
                                 fuse_fill_dir_t filler_function, void *buffer,
 | 
					                                 fuse_fill_dir_t filler_function, void *buffer,
 | 
				
			||||||
                                 populate_stat_callback populate_stat) -> int;
 | 
					                                 populate_stat_callback populate_stat) -> int;
 | 
				
			||||||
#endif
 | 
					#endif // !defined(_WIN32)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto get(std::size_t offset, std::string &item) -> int;
 | 
					  [[nodiscard]] auto get(std::size_t offset, std::string &item) -> int;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto get_count() const -> std::size_t { return items_.size(); }
 | 
					  [[nodiscard]] auto get_count() const -> std::size_t { return items_.size(); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto get_directory_item(std::size_t offset,
 | 
					  [[nodiscard]] auto get_directory_item(std::size_t offset, directory_item &di)
 | 
				
			||||||
                                        directory_item &di) -> api_error;
 | 
					      -> api_error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto get_directory_item(const std::string &api_path,
 | 
					  [[nodiscard]] auto get_directory_item(const std::string &api_path,
 | 
				
			||||||
                                        directory_item &di) -> api_error;
 | 
					                                        directory_item &di) -> api_error;
 | 
				
			||||||
@@ -71,8 +71,8 @@ public:
 | 
				
			|||||||
  auto operator=(const directory_iterator &iterator) noexcept
 | 
					  auto operator=(const directory_iterator &iterator) noexcept
 | 
				
			||||||
      -> directory_iterator &;
 | 
					      -> directory_iterator &;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto
 | 
					  auto operator=(directory_iterator &&iterator) noexcept
 | 
				
			||||||
  operator=(directory_iterator &&iterator) noexcept -> directory_iterator &;
 | 
					      -> directory_iterator &;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto operator=(directory_item_list list) noexcept -> directory_iterator &;
 | 
					  auto operator=(directory_item_list list) noexcept -> directory_iterator &;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -78,9 +78,9 @@ private:
 | 
				
			|||||||
  static void execute_void_callback(std::string_view function_name,
 | 
					  static void execute_void_callback(std::string_view function_name,
 | 
				
			||||||
                                    const std::function<void()> &cb);
 | 
					                                    const std::function<void()> &cb);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static auto
 | 
					  static auto execute_void_pointer_callback(std::string_view function_name,
 | 
				
			||||||
  execute_void_pointer_callback(std::string_view function_name,
 | 
					                                            const std::function<void *()> &cb)
 | 
				
			||||||
                                const std::function<void *()> &cb) -> void *;
 | 
					      -> void *;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void raise_fuse_event(std::string_view function_name,
 | 
					  void raise_fuse_event(std::string_view function_name,
 | 
				
			||||||
                        std::string_view api_path, int ret,
 | 
					                        std::string_view api_path, int ret,
 | 
				
			||||||
@@ -91,22 +91,22 @@ private:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#if defined(__APPLE__)
 | 
					#if defined(__APPLE__)
 | 
				
			||||||
  [[nodiscard]] static auto chflags_(const char *path, uint32_t flags) -> int;
 | 
					  [[nodiscard]] static auto chflags_(const char *path, uint32_t flags) -> int;
 | 
				
			||||||
#endif // __APPLE__
 | 
					#endif // defined(__APPLE__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if FUSE_USE_VERSION >= 30
 | 
					#if FUSE_USE_VERSION >= 30
 | 
				
			||||||
  [[nodiscard]] static auto chmod_(const char *path, mode_t mode,
 | 
					  [[nodiscard]] static auto chmod_(const char *path, mode_t mode,
 | 
				
			||||||
                                   struct fuse_file_info *fi) -> int;
 | 
					                                   struct fuse_file_info *fi) -> int;
 | 
				
			||||||
#else
 | 
					#else  // FUSE_USE_VERSION < 30
 | 
				
			||||||
  [[nodiscard]] static auto chmod_(const char *path, mode_t mode) -> int;
 | 
					  [[nodiscard]] static auto chmod_(const char *path, mode_t mode) -> int;
 | 
				
			||||||
#endif
 | 
					#endif // FUSE_USE_VERSION >= 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if FUSE_USE_VERSION >= 30
 | 
					#if FUSE_USE_VERSION >= 30
 | 
				
			||||||
  [[nodiscard]] static auto chown_(const char *path, uid_t uid, gid_t gid,
 | 
					  [[nodiscard]] static auto chown_(const char *path, uid_t uid, gid_t gid,
 | 
				
			||||||
                                   struct fuse_file_info *fi) -> int;
 | 
					                                   struct fuse_file_info *fi) -> int;
 | 
				
			||||||
#else
 | 
					#else  // FUSE_USE_VERSION < 30
 | 
				
			||||||
  [[nodiscard]] static auto chown_(const char *path, uid_t uid,
 | 
					  [[nodiscard]] static auto chown_(const char *path, uid_t uid, gid_t gid)
 | 
				
			||||||
                                   gid_t gid) -> int;
 | 
					      -> int;
 | 
				
			||||||
#endif
 | 
					#endif // FUSE_USE_VERSION >= 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] static auto create_(const char *path, mode_t mode,
 | 
					  [[nodiscard]] static auto create_(const char *path, mode_t mode,
 | 
				
			||||||
                                    struct fuse_file_info *fi) -> int;
 | 
					                                    struct fuse_file_info *fi) -> int;
 | 
				
			||||||
@@ -114,19 +114,19 @@ private:
 | 
				
			|||||||
  static void destroy_(void *ptr);
 | 
					  static void destroy_(void *ptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] static auto fallocate_(const char *path, int mode, off_t offset,
 | 
					  [[nodiscard]] static auto fallocate_(const char *path, int mode, off_t offset,
 | 
				
			||||||
                                       off_t length,
 | 
					                                       off_t length, struct fuse_file_info *fi)
 | 
				
			||||||
                                       struct fuse_file_info *fi) -> int;
 | 
					      -> int;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if FUSE_USE_VERSION < 30
 | 
					#if FUSE_USE_VERSION < 30
 | 
				
			||||||
  [[nodiscard]] static auto fgetattr_(const char *path, struct stat *st,
 | 
					  [[nodiscard]] static auto fgetattr_(const char *path, struct stat *st,
 | 
				
			||||||
                                      struct fuse_file_info *fi) -> int;
 | 
					                                      struct fuse_file_info *fi) -> int;
 | 
				
			||||||
#endif
 | 
					#endif // FUSE_USE_VERSION < 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(__APPLE__)
 | 
					#if defined(__APPLE__)
 | 
				
			||||||
  [[nodiscard]] static auto fsetattr_x_(const char *path,
 | 
					  [[nodiscard]] static auto fsetattr_x_(const char *path,
 | 
				
			||||||
                                        struct setattr_x *attr,
 | 
					                                        struct setattr_x *attr,
 | 
				
			||||||
                                        struct fuse_file_info *fi) -> int;
 | 
					                                        struct fuse_file_info *fi) -> int;
 | 
				
			||||||
#endif // __APPLE__
 | 
					#endif // defined(__APPLE__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] static auto fsync_(const char *path, int datasync,
 | 
					  [[nodiscard]] static auto fsync_(const char *path, int datasync,
 | 
				
			||||||
                                   struct fuse_file_info *fi) -> int;
 | 
					                                   struct fuse_file_info *fi) -> int;
 | 
				
			||||||
@@ -137,27 +137,27 @@ private:
 | 
				
			|||||||
#if FUSE_USE_VERSION >= 30
 | 
					#if FUSE_USE_VERSION >= 30
 | 
				
			||||||
  [[nodiscard]] static auto getattr_(const char *path, struct stat *st,
 | 
					  [[nodiscard]] static auto getattr_(const char *path, struct stat *st,
 | 
				
			||||||
                                     struct fuse_file_info *fi) -> int;
 | 
					                                     struct fuse_file_info *fi) -> int;
 | 
				
			||||||
#else
 | 
					#else  // FUSE_USE_VERSION < 30
 | 
				
			||||||
  [[nodiscard]] static auto getattr_(const char *path, struct stat *st) -> int;
 | 
					  [[nodiscard]] static auto getattr_(const char *path, struct stat *st) -> int;
 | 
				
			||||||
#endif
 | 
					#endif // FUSE_USE_VERSION >= 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(__APPLE__)
 | 
					#if defined(__APPLE__)
 | 
				
			||||||
  [[nodiscard]] static auto getxtimes_(const char *path,
 | 
					  [[nodiscard]] static auto getxtimes_(const char *path,
 | 
				
			||||||
                                       struct timespec *bkuptime,
 | 
					                                       struct timespec *bkuptime,
 | 
				
			||||||
                                       struct timespec *crtime) -> int;
 | 
					                                       struct timespec *crtime) -> int;
 | 
				
			||||||
#endif // __APPLE__
 | 
					#endif // defined(__APPLE__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if FUSE_USE_VERSION >= 30
 | 
					#if FUSE_USE_VERSION >= 30
 | 
				
			||||||
  [[nodiscard]] static auto init_(struct fuse_conn_info *conn,
 | 
					  [[nodiscard]] static auto init_(struct fuse_conn_info *conn,
 | 
				
			||||||
                                  struct fuse_config *cfg) -> void *;
 | 
					                                  struct fuse_config *cfg) -> void *;
 | 
				
			||||||
#else
 | 
					#else  // FUSE_USE_VERSION < 30
 | 
				
			||||||
  [[nodiscard]] static auto init_(struct fuse_conn_info *conn) -> void *;
 | 
					  [[nodiscard]] static auto init_(struct fuse_conn_info *conn) -> void *;
 | 
				
			||||||
#endif
 | 
					#endif // FUSE_USE_VERSION >= 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] static auto mkdir_(const char *path, mode_t mode) -> int;
 | 
					  [[nodiscard]] static auto mkdir_(const char *path, mode_t mode) -> int;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] static auto open_(const char *path,
 | 
					  [[nodiscard]] static auto open_(const char *path, struct fuse_file_info *fi)
 | 
				
			||||||
                                  struct fuse_file_info *fi) -> int;
 | 
					      -> int;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] static auto opendir_(const char *path,
 | 
					  [[nodiscard]] static auto opendir_(const char *path,
 | 
				
			||||||
                                     struct fuse_file_info *fi) -> int;
 | 
					                                     struct fuse_file_info *fi) -> int;
 | 
				
			||||||
@@ -171,12 +171,12 @@ private:
 | 
				
			|||||||
                                     fuse_fill_dir_t fuse_fill_dir,
 | 
					                                     fuse_fill_dir_t fuse_fill_dir,
 | 
				
			||||||
                                     off_t offset, struct fuse_file_info *fi,
 | 
					                                     off_t offset, struct fuse_file_info *fi,
 | 
				
			||||||
                                     fuse_readdir_flags flags) -> int;
 | 
					                                     fuse_readdir_flags flags) -> int;
 | 
				
			||||||
#else
 | 
					#else  // FUSE_USE_VERSION < 30
 | 
				
			||||||
  [[nodiscard]] static auto readdir_(const char *path, void *buf,
 | 
					  [[nodiscard]] static auto readdir_(const char *path, void *buf,
 | 
				
			||||||
                                     fuse_fill_dir_t fuse_fill_dir,
 | 
					                                     fuse_fill_dir_t fuse_fill_dir,
 | 
				
			||||||
                                     off_t offset,
 | 
					                                     off_t offset, struct fuse_file_info *fi)
 | 
				
			||||||
                                     struct fuse_file_info *fi) -> int;
 | 
					      -> int;
 | 
				
			||||||
#endif
 | 
					#endif // FUSE_USE_VERSION >= 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] static auto release_(const char *path,
 | 
					  [[nodiscard]] static auto release_(const char *path,
 | 
				
			||||||
                                     struct fuse_file_info *fi) -> int;
 | 
					                                     struct fuse_file_info *fi) -> int;
 | 
				
			||||||
@@ -187,9 +187,9 @@ private:
 | 
				
			|||||||
#if FUSE_USE_VERSION >= 30
 | 
					#if FUSE_USE_VERSION >= 30
 | 
				
			||||||
  [[nodiscard]] static auto rename_(const char *from, const char *to,
 | 
					  [[nodiscard]] static auto rename_(const char *from, const char *to,
 | 
				
			||||||
                                    unsigned int flags) -> int;
 | 
					                                    unsigned int flags) -> int;
 | 
				
			||||||
#else
 | 
					#else  // FUSE_USE_VERSION < 30
 | 
				
			||||||
  [[nodiscard]] static auto rename_(const char *from, const char *to) -> int;
 | 
					  [[nodiscard]] static auto rename_(const char *from, const char *to) -> int;
 | 
				
			||||||
#endif
 | 
					#endif // FUSE_USE_VERSION >= 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] static auto rmdir_(const char *path) -> int;
 | 
					  [[nodiscard]] static auto rmdir_(const char *path) -> int;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -199,35 +199,36 @@ private:
 | 
				
			|||||||
                                      char *value, size_t size,
 | 
					                                      char *value, size_t size,
 | 
				
			||||||
                                      uint32_t position) -> int;
 | 
					                                      uint32_t position) -> int;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#else  // __APPLE__
 | 
					#else  // !defined(__APPLE__)
 | 
				
			||||||
  [[nodiscard]] static auto getxattr_(const char *path, const char *name,
 | 
					  [[nodiscard]] static auto getxattr_(const char *path, const char *name,
 | 
				
			||||||
                                      char *value, size_t size) -> int;
 | 
					                                      char *value, size_t size) -> int;
 | 
				
			||||||
#endif // __APPLE__
 | 
					#endif // defined(__APPLE__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] static auto listxattr_(const char *path, char *buffer,
 | 
					  [[nodiscard]] static auto listxattr_(const char *path, char *buffer,
 | 
				
			||||||
                                       size_t size) -> int;
 | 
					                                       size_t size) -> int;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] static auto removexattr_(const char *path,
 | 
					  [[nodiscard]] static auto removexattr_(const char *path, const char *name)
 | 
				
			||||||
                                         const char *name) -> int;
 | 
					      -> int;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(__APPLE__)
 | 
					#if defined(__APPLE__)
 | 
				
			||||||
  [[nodiscard]] static auto setxattr_(const char *path, const char *name,
 | 
					  [[nodiscard]] static auto setxattr_(const char *path, const char *name,
 | 
				
			||||||
                                      const char *value, size_t size, int flags,
 | 
					                                      const char *value, size_t size, int flags,
 | 
				
			||||||
                                      uint32_t position) -> int;
 | 
					                                      uint32_t position) -> int;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#else  // __APPLE__
 | 
					#else  // !defined(__APPLE__)
 | 
				
			||||||
  [[nodiscard]] static auto setxattr_(const char *path, const char *name,
 | 
					  [[nodiscard]] static auto setxattr_(const char *path, const char *name,
 | 
				
			||||||
                                      const char *value, size_t size,
 | 
					                                      const char *value, size_t size, int flags)
 | 
				
			||||||
                                      int flags) -> int;
 | 
					      -> int;
 | 
				
			||||||
#endif // __APPLE__
 | 
					#endif // defined(__APPLE__)
 | 
				
			||||||
#endif // HAS_SETXATTR
 | 
					#endif // defined(HAS_SETXATTR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(__APPLE__)
 | 
					#if defined(__APPLE__)
 | 
				
			||||||
  [[nodiscard]] static auto setattr_x_(const char *path,
 | 
					  [[nodiscard]] static auto setattr_x_(const char *path, struct setattr_x *attr)
 | 
				
			||||||
                                       struct setattr_x *attr) -> int;
 | 
					      -> int;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] static auto
 | 
					  [[nodiscard]] static auto setbkuptime_(const char *path,
 | 
				
			||||||
  setbkuptime_(const char *path, const struct timespec *bkuptime) -> int;
 | 
					                                         const struct timespec *bkuptime)
 | 
				
			||||||
 | 
					      -> int;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] static auto setchgtime_(const char *path,
 | 
					  [[nodiscard]] static auto setchgtime_(const char *path,
 | 
				
			||||||
                                        const struct timespec *chgtime) -> int;
 | 
					                                        const struct timespec *chgtime) -> int;
 | 
				
			||||||
@@ -237,20 +238,20 @@ private:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] static auto setvolname_(const char *volname) -> int;
 | 
					  [[nodiscard]] static auto setvolname_(const char *volname) -> int;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] static auto statfs_x_(const char *path,
 | 
					  [[nodiscard]] static auto statfs_x_(const char *path, struct statfs *stbuf)
 | 
				
			||||||
                                      struct statfs *stbuf) -> int;
 | 
					      -> int;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#else  // __APPLE__
 | 
					#else  // !defined(__APPLE__)
 | 
				
			||||||
  [[nodiscard]] static auto statfs_(const char *path,
 | 
					  [[nodiscard]] static auto statfs_(const char *path, struct statvfs *stbuf)
 | 
				
			||||||
                                    struct statvfs *stbuf) -> int;
 | 
					      -> int;
 | 
				
			||||||
#endif // __APPLE__
 | 
					#endif // defined(__APPLE__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if FUSE_USE_VERSION >= 30
 | 
					#if FUSE_USE_VERSION >= 30
 | 
				
			||||||
  [[nodiscard]] static auto truncate_(const char *path, off_t size,
 | 
					  [[nodiscard]] static auto truncate_(const char *path, off_t size,
 | 
				
			||||||
                                      struct fuse_file_info *fi) -> int;
 | 
					                                      struct fuse_file_info *fi) -> int;
 | 
				
			||||||
#else
 | 
					#else  // FUSE_USE_VERSION < 30
 | 
				
			||||||
  [[nodiscard]] static auto truncate_(const char *path, off_t size) -> int;
 | 
					  [[nodiscard]] static auto truncate_(const char *path, off_t size) -> int;
 | 
				
			||||||
#endif
 | 
					#endif // FUSE_USE_VERSION >= 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] static auto unlink_(const char *path) -> int;
 | 
					  [[nodiscard]] static auto unlink_(const char *path) -> int;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -258,18 +259,18 @@ private:
 | 
				
			|||||||
  [[nodiscard]] static auto utimens_(const char *path,
 | 
					  [[nodiscard]] static auto utimens_(const char *path,
 | 
				
			||||||
                                     const struct timespec tv[2],
 | 
					                                     const struct timespec tv[2],
 | 
				
			||||||
                                     struct fuse_file_info *fi) -> int;
 | 
					                                     struct fuse_file_info *fi) -> int;
 | 
				
			||||||
#else
 | 
					#else  // FUSE_USE_VERSION < 30
 | 
				
			||||||
  [[nodiscard]] static auto utimens_(const char *path,
 | 
					  [[nodiscard]] static auto utimens_(const char *path,
 | 
				
			||||||
                                     const struct timespec tv[2]) -> int;
 | 
					                                     const struct timespec tv[2]) -> int;
 | 
				
			||||||
#endif
 | 
					#endif // FUSE_USE_VERSION >= 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] static auto write_(const char *path, const char *buffer,
 | 
					  [[nodiscard]] static auto write_(const char *path, const char *buffer,
 | 
				
			||||||
                                   size_t write_size, off_t write_offset,
 | 
					                                   size_t write_size, off_t write_offset,
 | 
				
			||||||
                                   struct fuse_file_info *fi) -> int;
 | 
					                                   struct fuse_file_info *fi) -> int;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
  [[nodiscard]] virtual auto access_impl(std::string /*api_path*/,
 | 
					  [[nodiscard]] virtual auto access_impl(std::string /*api_path*/, int /*mask*/)
 | 
				
			||||||
                                         int /*mask*/) -> api_error {
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -278,37 +279,40 @@ protected:
 | 
				
			|||||||
                                          uint32_t /*flags*/) -> api_error {
 | 
					                                          uint32_t /*flags*/) -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
#endif // __APPLE__
 | 
					#endif // defined(__APPLE__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if FUSE_USE_VERSION >= 30
 | 
					#if FUSE_USE_VERSION >= 30
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto chmod_impl(std::string /*api_path*/,
 | 
				
			||||||
  chmod_impl(std::string /*api_path*/, mode_t /*mode*/,
 | 
					                                        mode_t /*mode*/,
 | 
				
			||||||
             struct fuse_file_info * /*fi*/) -> api_error {
 | 
					                                        struct fuse_file_info * /*fi*/)
 | 
				
			||||||
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
#else
 | 
					#else //FUSE_USE_VERSION < 30
 | 
				
			||||||
  [[nodiscard]] virtual auto chmod_impl(std::string /*api_path*/,
 | 
					  [[nodiscard]] virtual auto chmod_impl(std::string /*api_path*/,
 | 
				
			||||||
                                        mode_t /*mode*/) -> api_error {
 | 
					                                        mode_t /*mode*/) -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
#endif
 | 
					#endif // FUSE_USE_VERSION >= 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if FUSE_USE_VERSION >= 30
 | 
					#if FUSE_USE_VERSION >= 30
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto chown_impl(std::string /*api_path*/, uid_t /*uid*/,
 | 
				
			||||||
  chown_impl(std::string /*api_path*/, uid_t /*uid*/, gid_t /*gid*/,
 | 
					                                        gid_t /*gid*/,
 | 
				
			||||||
             struct fuse_file_info * /*fi*/) -> api_error {
 | 
					                                        struct fuse_file_info * /*fi*/)
 | 
				
			||||||
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
#else
 | 
					#else // FUSE_USE_VERSION < 30
 | 
				
			||||||
  [[nodiscard]] virtual auto chown_impl(std::string /*api_path*/, uid_t /*uid*/,
 | 
					  [[nodiscard]] virtual auto chown_impl(std::string /*api_path*/, uid_t /*uid*/,
 | 
				
			||||||
                                        gid_t /*gid*/) -> api_error {
 | 
					                                        gid_t /*gid*/) -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
#endif
 | 
					#endif // FUSE_USE_VERSION >= 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto create_impl(std::string /*api_path*/,
 | 
				
			||||||
  create_impl(std::string /*api_path*/, mode_t /*mode*/,
 | 
					                                         mode_t /*mode*/,
 | 
				
			||||||
              struct fuse_file_info * /*fi*/) -> api_error {
 | 
					                                         struct fuse_file_info * /*fi*/)
 | 
				
			||||||
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -316,81 +320,87 @@ protected:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto
 | 
				
			||||||
  fallocate_impl(std::string /*api_path*/, int /*mode*/, off_t /*offset*/,
 | 
					  fallocate_impl(std::string /*api_path*/, int /*mode*/, off_t /*offset*/,
 | 
				
			||||||
                 off_t /*length*/,
 | 
					                 off_t /*length*/, struct fuse_file_info * /*fi*/)
 | 
				
			||||||
                 struct fuse_file_info * /*fi*/) -> api_error {
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto fgetattr_impl(std::string /*api_path*/,
 | 
				
			||||||
  fgetattr_impl(std::string /*api_path*/, struct stat * /*st*/,
 | 
					                                           struct stat * /*st*/,
 | 
				
			||||||
                struct fuse_file_info * /*fi*/) -> api_error {
 | 
					                                           struct fuse_file_info * /*fi*/)
 | 
				
			||||||
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(__APPLE__)
 | 
					#if defined(__APPLE__)
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto fsetattr_x_impl(std::string /*api_path*/,
 | 
				
			||||||
  fsetattr_x_impl(std::string /*api_path*/, struct setattr_x * /*attr*/,
 | 
					                                             struct setattr_x * /*attr*/,
 | 
				
			||||||
                  struct fuse_file_info * /*fi*/) -> api_error {
 | 
					                                             struct fuse_file_info * /*fi*/)
 | 
				
			||||||
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
#endif // __APPLE__
 | 
					#endif // defined(__APPLE__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto fsync_impl(std::string /*api_path*/,
 | 
				
			||||||
  fsync_impl(std::string /*api_path*/, int /*datasync*/,
 | 
					                                        int /*datasync*/,
 | 
				
			||||||
             struct fuse_file_info * /*fi*/) -> api_error {
 | 
					                                        struct fuse_file_info * /*fi*/)
 | 
				
			||||||
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if FUSE_USE_VERSION < 30
 | 
					#if FUSE_USE_VERSION < 30
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto ftruncate_impl(std::string /*api_path*/,
 | 
				
			||||||
  ftruncate_impl(std::string /*api_path*/, off_t /*size*/,
 | 
					                                            off_t /*size*/,
 | 
				
			||||||
                 struct fuse_file_info * /*fi*/) -> api_error {
 | 
					                                            struct fuse_file_info * /*fi*/)
 | 
				
			||||||
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
#endif
 | 
					#endif // FUSE_USE_VERSION < 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if FUSE_USE_VERSION >= 30
 | 
					#if FUSE_USE_VERSION >= 30
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto getattr_impl(std::string /*api_path*/,
 | 
				
			||||||
  getattr_impl(std::string /*api_path*/, struct stat * /*st*/,
 | 
					                                          struct stat * /*st*/,
 | 
				
			||||||
               struct fuse_file_info * /*fi*/) -> api_error {
 | 
					                                          struct fuse_file_info * /*fi*/)
 | 
				
			||||||
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
#else
 | 
					#else // FUSE_USE_VERSION < 30
 | 
				
			||||||
  [[nodiscard]] virtual auto getattr_impl(std::string /*api_path*/,
 | 
					  [[nodiscard]] virtual auto getattr_impl(std::string /*api_path*/,
 | 
				
			||||||
                                          struct stat * /*st*/) -> api_error {
 | 
					                                          struct stat * /*st*/) -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
#endif
 | 
					#endif // FUSE_USE_VERSION >= 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(__APPLE__)
 | 
					#if defined(__APPLE__)
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto getxtimes_impl(std::string /*api_path*/,
 | 
				
			||||||
  getxtimes_impl(std::string /*api_path*/, struct timespec * /*bkuptime*/,
 | 
					                                            struct timespec * /*bkuptime*/,
 | 
				
			||||||
                 struct timespec * /*crtime*/) -> api_error {
 | 
					                                            struct timespec * /*crtime*/)
 | 
				
			||||||
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
#endif // __APPLE__
 | 
					#endif // defined(__APPLE__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if FUSE_USE_VERSION >= 30
 | 
					#if FUSE_USE_VERSION >= 30
 | 
				
			||||||
  virtual auto init_impl(struct fuse_conn_info *conn,
 | 
					  virtual auto init_impl(struct fuse_conn_info *conn, struct fuse_config *cfg)
 | 
				
			||||||
                         struct fuse_config *cfg) -> void *;
 | 
					      -> void *;
 | 
				
			||||||
#else
 | 
					#else // FUSE_USE_VERSION < 30
 | 
				
			||||||
  virtual auto init_impl(struct fuse_conn_info *conn) -> void *;
 | 
					  virtual auto init_impl(struct fuse_conn_info *conn) -> void *;
 | 
				
			||||||
#endif
 | 
					#endif // FUSE_USE_VERSION >= 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto mkdir_impl(std::string /*api_path*/,
 | 
					  [[nodiscard]] virtual auto mkdir_impl(std::string /*api_path*/,
 | 
				
			||||||
                                        mode_t /*mode*/) -> api_error {
 | 
					                                        mode_t /*mode*/) -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto open_impl(std::string /*api_path*/,
 | 
				
			||||||
  open_impl(std::string /*api_path*/,
 | 
					                                       struct fuse_file_info * /*fi*/)
 | 
				
			||||||
            struct fuse_file_info * /*fi*/) -> api_error {
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto opendir_impl(std::string /*api_path*/,
 | 
				
			||||||
  opendir_impl(std::string /*api_path*/,
 | 
					                                          struct fuse_file_info * /*fi*/)
 | 
				
			||||||
               struct fuse_file_info * /*fi*/) -> api_error {
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -405,28 +415,28 @@ protected:
 | 
				
			|||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto
 | 
				
			||||||
  readdir_impl(std::string /*api_path*/, void * /*buf*/,
 | 
					  readdir_impl(std::string /*api_path*/, void * /*buf*/,
 | 
				
			||||||
               fuse_fill_dir_t /*fuse_fill_dir*/, off_t /*offset*/,
 | 
					               fuse_fill_dir_t /*fuse_fill_dir*/, off_t /*offset*/,
 | 
				
			||||||
               struct fuse_file_info * /*fi*/,
 | 
					               struct fuse_file_info * /*fi*/, fuse_readdir_flags /*flags*/)
 | 
				
			||||||
               fuse_readdir_flags /*flags*/) -> api_error {
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
#else
 | 
					#else // FUSE_USE_VERSION < 30
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto
 | 
				
			||||||
  readdir_impl(std::string /*api_path*/, void * /*buf*/,
 | 
					  readdir_impl(std::string /*api_path*/, void * /*buf*/,
 | 
				
			||||||
               fuse_fill_dir_t /*fuse_fill_dir*/, off_t /*offset*/,
 | 
					               fuse_fill_dir_t /*fuse_fill_dir*/, off_t /*offset*/,
 | 
				
			||||||
               struct fuse_file_info * /*fi*/) -> api_error {
 | 
					               struct fuse_file_info * /*fi*/) -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
#endif
 | 
					#endif // FUSE_USE_VERSION >= 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto release_impl(std::string /*api_path*/,
 | 
				
			||||||
  release_impl(std::string /*api_path*/,
 | 
					                                          struct fuse_file_info * /*fi*/)
 | 
				
			||||||
               struct fuse_file_info * /*fi*/) -> api_error {
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto releasedir_impl(std::string /*api_path*/,
 | 
				
			||||||
  releasedir_impl(std::string /*api_path*/,
 | 
					                                             struct fuse_file_info * /*fi*/)
 | 
				
			||||||
                  struct fuse_file_info * /*fi*/) -> api_error {
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -436,13 +446,13 @@ protected:
 | 
				
			|||||||
                                         unsigned int /*flags*/) -> api_error {
 | 
					                                         unsigned int /*flags*/) -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
#else
 | 
					#else // FUSE_USE_VERSION < 30
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto rename_impl(std::string /*from_api_path*/,
 | 
				
			||||||
  rename_impl(std::string /*from_api_path*/,
 | 
					                                         std::string /*to_api_path*/)
 | 
				
			||||||
              std::string /*to_api_path*/) -> api_error {
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
#endif
 | 
					#endif // FUSE_USE_VERSION >= 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto rmdir_impl(std::string /*api_path*/) -> api_error {
 | 
					  [[nodiscard]] virtual auto rmdir_impl(std::string /*api_path*/) -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
@@ -456,14 +466,14 @@ protected:
 | 
				
			|||||||
                int & /*attribute_size*/) -> api_error {
 | 
					                int & /*attribute_size*/) -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
#else  // __APPLE__
 | 
					#else  // !defined(__APPLE__)
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto
 | 
				
			||||||
  getxattr_impl(std::string /*api_path*/, const char * /*name*/,
 | 
					  getxattr_impl(std::string /*api_path*/, const char * /*name*/,
 | 
				
			||||||
                char * /*value*/, size_t /*size*/,
 | 
					                char * /*value*/, size_t /*size*/, int & /*attribute_size*/)
 | 
				
			||||||
                int & /*attribute_size*/) -> api_error {
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
#endif // __APPLE__
 | 
					#endif // defined(__APPLE__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto
 | 
				
			||||||
  listxattr_impl(std::string /*api_path*/, char * /*buffer*/, size_t /*size*/,
 | 
					  listxattr_impl(std::string /*api_path*/, char * /*buffer*/, size_t /*size*/,
 | 
				
			||||||
@@ -471,9 +481,9 @@ protected:
 | 
				
			|||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto removexattr_impl(std::string /*api_path*/,
 | 
				
			||||||
  removexattr_impl(std::string /*api_path*/,
 | 
					                                              const char * /*name*/)
 | 
				
			||||||
                   const char * /*name*/) -> api_error {
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -485,21 +495,20 @@ protected:
 | 
				
			|||||||
                                           uint32_t /*position*/) -> api_error {
 | 
					                                           uint32_t /*position*/) -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
#else  // __APPLE__
 | 
					#else  // !defined (__APPLE__)
 | 
				
			||||||
  [[nodiscard]] virtual auto setxattr_impl(std::string /*api_path*/,
 | 
					  [[nodiscard]] virtual auto
 | 
				
			||||||
                                           const char * /*name*/,
 | 
					  setxattr_impl(std::string /*api_path*/, const char * /*name*/,
 | 
				
			||||||
                                           const char * /*value*/,
 | 
					                const char * /*value*/, size_t /*size*/, int /*flags*/)
 | 
				
			||||||
                                           size_t /*size*/,
 | 
					      -> api_error {
 | 
				
			||||||
                                           int /*flags*/) -> api_error {
 | 
					 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
#endif // __APPLE__
 | 
					#endif // defined (__APPLE__)
 | 
				
			||||||
#endif // HAS_SETXATTR
 | 
					#endif // defined(HAS_SETXATTR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(__APPLE__)
 | 
					#if defined(__APPLE__)
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto setattr_x_impl(std::string /*api_path*/,
 | 
				
			||||||
  setattr_x_impl(std::string /*api_path*/,
 | 
					                                            struct setattr_x * /*attr*/)
 | 
				
			||||||
                 struct setattr_x * /*attr*/) -> api_error {
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -510,72 +519,74 @@ protected:
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto
 | 
				
			||||||
  setchgtime_impl(std::string /*api_path*/,
 | 
					  setchgtime_impl(std::string /*api_path*/, const struct timespec * /*chgtime*/)
 | 
				
			||||||
                  const struct timespec * /*chgtime*/) -> api_error {
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto setcrtime_impl(std::string /*api_path*/,
 | 
				
			||||||
  setcrtime_impl(std::string /*api_path*/,
 | 
					                                            const struct timespec * /*crtime*/)
 | 
				
			||||||
                 const struct timespec * /*crtime*/) -> api_error {
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto setvolname_impl(const char * /*volname*/)
 | 
				
			||||||
  setvolname_impl(const char * /*volname*/) -> api_error {
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto statfs_x_impl(std::string /*api_path*/,
 | 
				
			||||||
  statfs_x_impl(std::string /*api_path*/,
 | 
					                                           struct statfs * /*stbuf*/)
 | 
				
			||||||
                struct statfs * /*stbuf*/) -> api_error {
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
#else  // __APPLE__
 | 
					#else  // !defined(__APPLE__)
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto statfs_impl(std::string /*api_path*/,
 | 
				
			||||||
  statfs_impl(std::string /*api_path*/,
 | 
					                                         struct statvfs * /*stbuf*/)
 | 
				
			||||||
              struct statvfs * /*stbuf*/) -> api_error {
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
#endif // __APPLE__
 | 
					#endif // defined(__APPLE__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if FUSE_USE_VERSION >= 30
 | 
					#if FUSE_USE_VERSION >= 30
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto truncate_impl(std::string /*api_path*/,
 | 
				
			||||||
  truncate_impl(std::string /*api_path*/, off_t /*size*/,
 | 
					                                           off_t /*size*/,
 | 
				
			||||||
                struct fuse_file_info * /*fi*/) -> api_error {
 | 
					                                           struct fuse_file_info * /*fi*/)
 | 
				
			||||||
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
#else
 | 
					#else // FUSE_USE_VERSION < 30
 | 
				
			||||||
  [[nodiscard]] virtual auto truncate_impl(std::string /*api_path*/,
 | 
					  [[nodiscard]] virtual auto truncate_impl(std::string /*api_path*/,
 | 
				
			||||||
                                           off_t /*size*/) -> api_error {
 | 
					                                           off_t /*size*/) -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
#endif
 | 
					#endif // FUSE_USE_VERSION >= 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto unlink_impl(std::string /*api_path*/)
 | 
				
			||||||
  unlink_impl(std::string /*api_path*/) -> api_error {
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if FUSE_USE_VERSION >= 30
 | 
					#if FUSE_USE_VERSION >= 30
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto utimens_impl(std::string /*api_path*/,
 | 
				
			||||||
  utimens_impl(std::string /*api_path*/, const struct timespec /*tv*/[2],
 | 
					                                          const struct timespec /*tv*/[2],
 | 
				
			||||||
               struct fuse_file_info * /*fi*/) -> api_error {
 | 
					                                          struct fuse_file_info * /*fi*/)
 | 
				
			||||||
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
#else
 | 
					#else // FUSE_USE_VERSION < 30
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto utimens_impl(std::string /*api_path*/,
 | 
				
			||||||
  utimens_impl(std::string /*api_path*/,
 | 
					                                          const struct timespec /*tv*/[2])
 | 
				
			||||||
               const struct timespec /*tv*/[2]) -> api_error {
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
#endif
 | 
					#endif // FUSE_USE_VERSION >= 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto
 | 
				
			||||||
  write_impl(std::string /*api_path*/, const char * /*buffer*/,
 | 
					  write_impl(std::string /*api_path*/, const char * /*buffer*/,
 | 
				
			||||||
             size_t /*write_size*/, off_t /*write_offset*/,
 | 
					             size_t /*write_size*/, off_t /*write_offset*/,
 | 
				
			||||||
             struct fuse_file_info * /*fi*/,
 | 
					             struct fuse_file_info * /*fi*/, std::size_t & /*bytes_written*/)
 | 
				
			||||||
             std::size_t & /*bytes_written*/) -> api_error {
 | 
					      -> api_error {
 | 
				
			||||||
    return api_error::not_implemented;
 | 
					    return api_error::not_implemented;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -603,5 +614,5 @@ public:
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
} // namespace repertory
 | 
					} // namespace repertory
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // _WIN32
 | 
					#endif // !defined(_WIN32)
 | 
				
			||||||
#endif // REPERTORY_INCLUDE_DRIVES_FUSE_FUSE_BASE_HPP_
 | 
					#endif // REPERTORY_INCLUDE_DRIVES_FUSE_FUSE_BASE_HPP_
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -73,92 +73,95 @@ private:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
#if defined(__APPLE__)
 | 
					#if defined(__APPLE__)
 | 
				
			||||||
  [[nodiscard]] auto chflags_impl(std::string api_path,
 | 
					  [[nodiscard]] auto chflags_impl(std::string api_path, uint32_t flags)
 | 
				
			||||||
                                  uint32_t flags) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
#endif // __APPLE__
 | 
					#endif // defined(__APPLE__{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if FUSE_USE_VERSION >= 30
 | 
					#if FUSE_USE_VERSION >= 30
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto chmod_impl(std::string api_path, mode_t mode,
 | 
				
			||||||
  chmod_impl(std::string api_path, mode_t mode,
 | 
					                                struct fuse_file_info *file_info)
 | 
				
			||||||
             struct fuse_file_info *file_info) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
#else
 | 
					#else  // FUSE_USE_VERSION < 30
 | 
				
			||||||
  [[nodiscard]] auto chmod_impl(std::string api_path,
 | 
					  [[nodiscard]] auto chmod_impl(std::string api_path, mode_t mode)
 | 
				
			||||||
                                mode_t mode) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
#endif
 | 
					#endif // FUSE_USE_VERSION >= 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if FUSE_USE_VERSION >= 30
 | 
					#if FUSE_USE_VERSION >= 30
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto chown_impl(std::string api_path, uid_t uid, gid_t gid,
 | 
				
			||||||
  chown_impl(std::string api_path, uid_t uid, gid_t gid,
 | 
					                                struct fuse_file_info *file_info)
 | 
				
			||||||
             struct fuse_file_info *file_info) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
#else
 | 
					#else  // FUSE_USE_VERSION < 30
 | 
				
			||||||
  [[nodiscard]] auto chown_impl(std::string api_path, uid_t uid,
 | 
					  [[nodiscard]] auto chown_impl(std::string api_path, uid_t uid, gid_t gid)
 | 
				
			||||||
                                gid_t gid) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
#endif
 | 
					#endif // FUSE_USE_VERSION >= 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto create_impl(std::string api_path, mode_t mode,
 | 
				
			||||||
  create_impl(std::string api_path, mode_t mode,
 | 
					                                 struct fuse_file_info *file_info)
 | 
				
			||||||
              struct fuse_file_info *file_info) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void destroy_impl(void *ptr) override;
 | 
					  void destroy_impl(void *ptr) override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto fallocate_impl(std::string api_path, int mode,
 | 
				
			||||||
  fallocate_impl(std::string api_path, int mode, off_t offset, off_t length,
 | 
					                                    off_t offset, off_t length,
 | 
				
			||||||
                 struct fuse_file_info *file_info) -> api_error override;
 | 
					                                    struct fuse_file_info *file_info)
 | 
				
			||||||
 | 
					      -> api_error override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto fgetattr_impl(std::string api_path, struct stat *unix_st,
 | 
				
			||||||
  fgetattr_impl(std::string api_path, struct stat *unix_st,
 | 
					                                   struct fuse_file_info *file_info)
 | 
				
			||||||
                struct fuse_file_info *file_info) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(__APPLE__)
 | 
					#if defined(__APPLE__)
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto fsetattr_x_impl(std::string api_path,
 | 
				
			||||||
  fsetattr_x_impl(std::string api_path, struct setattr_x *attr,
 | 
					                                     struct setattr_x *attr,
 | 
				
			||||||
                  struct fuse_file_info *file_info) -> api_error override;
 | 
					                                     struct fuse_file_info *file_info)
 | 
				
			||||||
#endif // __APPLE__
 | 
					      -> api_error override;
 | 
				
			||||||
 | 
					#endif // defined(__APPLE__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto fsync_impl(std::string api_path, int datasync,
 | 
				
			||||||
  fsync_impl(std::string api_path, int datasync,
 | 
					                                struct fuse_file_info *file_info)
 | 
				
			||||||
             struct fuse_file_info *file_info) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if FUSE_USE_VERSION < 30
 | 
					#if FUSE_USE_VERSION < 30
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto ftruncate_impl(std::string api_path, off_t size,
 | 
				
			||||||
  ftruncate_impl(std::string api_path, off_t size,
 | 
					                                    struct fuse_file_info *file_info)
 | 
				
			||||||
                 struct fuse_file_info *file_info) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
#endif
 | 
					#endif // FUSE_USE_VERSION < 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if FUSE_USE_VERSION >= 30
 | 
					#if FUSE_USE_VERSION >= 30
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto getattr_impl(std::string api_path, struct stat *unix_st,
 | 
				
			||||||
  getattr_impl(std::string api_path, struct stat *unix_st,
 | 
					                                  struct fuse_file_info *file_info)
 | 
				
			||||||
               struct fuse_file_info *file_info) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
#else
 | 
					#else  // FUSE_USE_VERSION < 30
 | 
				
			||||||
  [[nodiscard]] auto getattr_impl(std::string api_path,
 | 
					  [[nodiscard]] auto getattr_impl(std::string api_path, struct stat *unix_st)
 | 
				
			||||||
                                  struct stat *unix_st) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
#endif
 | 
					#endif // FUSE_USE_VERSION >= 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(__APPLE__)
 | 
					#if defined(__APPLE__)
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto getxtimes_impl(std::string api_path,
 | 
				
			||||||
  getxtimes_impl(std::string api_path, struct timespec *bkuptime,
 | 
					                                    struct timespec *bkuptime,
 | 
				
			||||||
                 struct timespec *crtime) -> api_error override;
 | 
					                                    struct timespec *crtime)
 | 
				
			||||||
#endif // __APPLE__
 | 
					      -> api_error override;
 | 
				
			||||||
 | 
					#endif // defined(__APPLE__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if FUSE_USE_VERSION >= 30
 | 
					#if FUSE_USE_VERSION >= 30
 | 
				
			||||||
  auto init_impl(struct fuse_conn_info *conn,
 | 
					  auto init_impl(struct fuse_conn_info *conn, struct fuse_config *cfg)
 | 
				
			||||||
                 struct fuse_config *cfg) -> void * override;
 | 
					      -> void * override;
 | 
				
			||||||
#else
 | 
					#else  // FUSE_USE_VERSION < 30
 | 
				
			||||||
  auto init_impl(struct fuse_conn_info *conn) -> void * override;
 | 
					  auto init_impl(struct fuse_conn_info *conn) -> void * override;
 | 
				
			||||||
#endif
 | 
					#endif // FUSE_USE_VERSION >= 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto mkdir_impl(std::string api_path,
 | 
					  [[nodiscard]] auto mkdir_impl(std::string api_path, mode_t mode)
 | 
				
			||||||
                                mode_t mode) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void notify_fuse_main_exit(int &ret) override;
 | 
					  void notify_fuse_main_exit(int &ret) override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto open_impl(std::string api_path,
 | 
				
			||||||
  open_impl(std::string api_path,
 | 
					                               struct fuse_file_info *file_info)
 | 
				
			||||||
            struct fuse_file_info *file_info) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto opendir_impl(std::string api_path,
 | 
				
			||||||
  opendir_impl(std::string api_path,
 | 
					                                  struct fuse_file_info *file_info)
 | 
				
			||||||
               struct fuse_file_info *file_info) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto read_impl(std::string api_path, char *buffer,
 | 
					  [[nodiscard]] auto read_impl(std::string api_path, char *buffer,
 | 
				
			||||||
                               size_t read_size, off_t read_offset,
 | 
					                               size_t read_size, off_t read_offset,
 | 
				
			||||||
@@ -166,121 +169,124 @@ protected:
 | 
				
			|||||||
                               std::size_t &bytes_read) -> api_error override;
 | 
					                               std::size_t &bytes_read) -> api_error override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if FUSE_USE_VERSION >= 30
 | 
					#if FUSE_USE_VERSION >= 30
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto readdir_impl(std::string api_path, void *buf,
 | 
				
			||||||
  readdir_impl(std::string api_path, void *buf, fuse_fill_dir_t fuse_fill_dir,
 | 
					                                  fuse_fill_dir_t fuse_fill_dir, off_t offset,
 | 
				
			||||||
               off_t offset, struct fuse_file_info *file_info,
 | 
					                                  struct fuse_file_info *file_info,
 | 
				
			||||||
               fuse_readdir_flags flags) -> api_error override;
 | 
					                                  fuse_readdir_flags flags)
 | 
				
			||||||
#else
 | 
					      -> api_error override;
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					#else  // FUSE_USE_VERSION < 30
 | 
				
			||||||
  readdir_impl(std::string api_path, void *buf, fuse_fill_dir_t fuse_fill_dir,
 | 
					  [[nodiscard]] auto readdir_impl(std::string api_path, void *buf,
 | 
				
			||||||
               off_t offset,
 | 
					                                  fuse_fill_dir_t fuse_fill_dir, off_t offset,
 | 
				
			||||||
               struct fuse_file_info *file_info) -> api_error override;
 | 
					                                  struct fuse_file_info *file_info)
 | 
				
			||||||
#endif
 | 
					      -> api_error override;
 | 
				
			||||||
 | 
					#endif // FUSE_USE_VERSION >= 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto release_impl(std::string api_path,
 | 
				
			||||||
  release_impl(std::string api_path,
 | 
					                                  struct fuse_file_info *file_info)
 | 
				
			||||||
               struct fuse_file_info *file_info) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto releasedir_impl(std::string api_path,
 | 
				
			||||||
  releasedir_impl(std::string api_path,
 | 
					                                     struct fuse_file_info *file_info)
 | 
				
			||||||
                  struct fuse_file_info *file_info) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if FUSE_USE_VERSION >= 30
 | 
					#if FUSE_USE_VERSION >= 30
 | 
				
			||||||
  [[nodiscard]] auto rename_impl(std::string from_api_path,
 | 
					  [[nodiscard]] auto rename_impl(std::string from_api_path,
 | 
				
			||||||
                                 std::string to_api_path,
 | 
					                                 std::string to_api_path, unsigned int flags)
 | 
				
			||||||
                                 unsigned int flags) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
#else
 | 
					#else  // FUSE_USE_VERSION < 30
 | 
				
			||||||
  [[nodiscard]] auto rename_impl(std::string from_api_path,
 | 
					  [[nodiscard]] auto rename_impl(std::string from_api_path,
 | 
				
			||||||
                                 std::string to_api_path) -> api_error override;
 | 
					                                 std::string to_api_path) -> api_error override;
 | 
				
			||||||
#endif
 | 
					#endif // FUSE_USE_VERSION >= 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto rmdir_impl(std::string api_path) -> api_error override;
 | 
					  [[nodiscard]] auto rmdir_impl(std::string api_path) -> api_error override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(HAS_SETXATTR)
 | 
					#if defined(HAS_SETXATTR)
 | 
				
			||||||
  [[nodiscard]] auto getxattr_common(std::string api_path, const char *name,
 | 
					  [[nodiscard]] auto getxattr_common(std::string api_path, const char *name,
 | 
				
			||||||
                                     char *value, size_t size,
 | 
					                                     char *value, size_t size,
 | 
				
			||||||
                                     int &attribute_size,
 | 
					                                     int &attribute_size, uint32_t *position)
 | 
				
			||||||
                                     uint32_t *position) -> api_error;
 | 
					      -> api_error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(__APPLE__)
 | 
					#if defined(__APPLE__)
 | 
				
			||||||
  [[nodiscard]] auto getxattr_impl(std::string api_path, const char *name,
 | 
					  [[nodiscard]] auto getxattr_impl(std::string api_path, const char *name,
 | 
				
			||||||
                                   char *value, size_t size, uint32_t position,
 | 
					                                   char *value, size_t size, uint32_t position,
 | 
				
			||||||
                                   int &attribute_size) -> api_error override;
 | 
					                                   int &attribute_size) -> api_error override;
 | 
				
			||||||
#else  // __APPLE__
 | 
					#else  // !defined(__APPLE__)
 | 
				
			||||||
  [[nodiscard]] auto getxattr_impl(std::string api_path, const char *name,
 | 
					  [[nodiscard]] auto getxattr_impl(std::string api_path, const char *name,
 | 
				
			||||||
                                   char *value, size_t size,
 | 
					                                   char *value, size_t size,
 | 
				
			||||||
                                   int &attribute_size) -> api_error override;
 | 
					                                   int &attribute_size) -> api_error override;
 | 
				
			||||||
#endif // __APPLE__
 | 
					#endif // defined(__APPLE__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto listxattr_impl(std::string api_path, char *buffer,
 | 
					  [[nodiscard]] auto listxattr_impl(std::string api_path, char *buffer,
 | 
				
			||||||
                                    size_t size, int &required_size,
 | 
					                                    size_t size, int &required_size,
 | 
				
			||||||
                                    bool &return_size) -> api_error override;
 | 
					                                    bool &return_size) -> api_error override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto removexattr_impl(std::string api_path,
 | 
					  [[nodiscard]] auto removexattr_impl(std::string api_path, const char *name)
 | 
				
			||||||
                                      const char *name) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(__APPLE__)
 | 
					#if defined(__APPLE__)
 | 
				
			||||||
  [[nodiscard]] auto setxattr_impl(std::string api_path, const char *name,
 | 
					  [[nodiscard]] auto setxattr_impl(std::string api_path, const char *name,
 | 
				
			||||||
                                   const char *value, size_t size, int flags,
 | 
					                                   const char *value, size_t size, int flags,
 | 
				
			||||||
                                   uint32_t position) -> api_error override;
 | 
					                                   uint32_t position) -> api_error override;
 | 
				
			||||||
#else  // __APPLE__
 | 
					#else  // !defined(__APPLE__)
 | 
				
			||||||
  [[nodiscard]] auto setxattr_impl(std::string api_path, const char *name,
 | 
					  [[nodiscard]] auto setxattr_impl(std::string api_path, const char *name,
 | 
				
			||||||
                                   const char *value, size_t size,
 | 
					                                   const char *value, size_t size, int flags)
 | 
				
			||||||
                                   int flags) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
#endif // __APPLE__
 | 
					#endif // defined(__APPLE__)
 | 
				
			||||||
#endif // HAS_SETXATTR
 | 
					#endif // defined(HAS_SETXATTR{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(__APPLE__)
 | 
					#if defined(__APPLE__)
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto setattr_x_impl(std::string api_path,
 | 
				
			||||||
  setattr_x_impl(std::string api_path,
 | 
					                                    struct setattr_x *attr)
 | 
				
			||||||
                 struct setattr_x *attr) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto setbkuptime_impl(std::string api_path,
 | 
				
			||||||
  setbkuptime_impl(std::string api_path,
 | 
					                                      const struct timespec *bkuptime)
 | 
				
			||||||
                   const struct timespec *bkuptime) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto setchgtime_impl(std::string api_path,
 | 
				
			||||||
  setchgtime_impl(std::string api_path,
 | 
					                                     const struct timespec *chgtime)
 | 
				
			||||||
                  const struct timespec *chgtime) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto setcrtime_impl(std::string api_path,
 | 
				
			||||||
  setcrtime_impl(std::string api_path,
 | 
					                                    const struct timespec *crtime)
 | 
				
			||||||
                 const struct timespec *crtime) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto setvolname_impl(const char *volname) -> api_error override;
 | 
					  [[nodiscard]] auto setvolname_impl(const char *volname) -> api_error override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto statfs_x_impl(std::string api_path,
 | 
					  [[nodiscard]] auto statfs_x_impl(std::string api_path, struct statfs *stbuf)
 | 
				
			||||||
                                   struct statfs *stbuf) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
#else  // __APPLE__
 | 
					#else  // !defined(__APPLE__)
 | 
				
			||||||
  [[nodiscard]] auto statfs_impl(std::string api_path,
 | 
					  [[nodiscard]] auto statfs_impl(std::string api_path, struct statvfs *stbuf)
 | 
				
			||||||
                                 struct statvfs *stbuf) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
#endif // __APPLE__
 | 
					#endif // defined(__APPLE__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if FUSE_USE_VERSION >= 30
 | 
					#if FUSE_USE_VERSION >= 30
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto truncate_impl(std::string api_path, off_t size,
 | 
				
			||||||
  truncate_impl(std::string api_path, off_t size,
 | 
					                                   struct fuse_file_info *file_info)
 | 
				
			||||||
                struct fuse_file_info *file_info) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
#else
 | 
					#else  // FUSE_USE_VERSION < 30
 | 
				
			||||||
  [[nodiscard]] auto truncate_impl(std::string api_path,
 | 
					  [[nodiscard]] auto truncate_impl(std::string api_path, off_t size)
 | 
				
			||||||
                                   off_t size) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
#endif
 | 
					#endif // FUSE_USE_VERSION >= 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto unlink_impl(std::string api_path) -> api_error override;
 | 
					  [[nodiscard]] auto unlink_impl(std::string api_path) -> api_error override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if FUSE_USE_VERSION >= 30
 | 
					#if FUSE_USE_VERSION >= 30
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto utimens_impl(std::string api_path,
 | 
				
			||||||
  utimens_impl(std::string api_path, const struct timespec tv[2],
 | 
					                                  const struct timespec tv[2],
 | 
				
			||||||
               struct fuse_file_info *file_info) -> api_error override;
 | 
					                                  struct fuse_file_info *file_info)
 | 
				
			||||||
#else
 | 
					      -> api_error override;
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					#else  // FUSE_USE_VERSION < 30
 | 
				
			||||||
  utimens_impl(std::string api_path,
 | 
					  [[nodiscard]] auto utimens_impl(std::string api_path,
 | 
				
			||||||
               const struct timespec tv[2]) -> api_error override;
 | 
					                                  const struct timespec tv[2])
 | 
				
			||||||
#endif
 | 
					      -> api_error override;
 | 
				
			||||||
 | 
					#endif // FUSE_USE_VERSION >= 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto write_impl(std::string api_path, const char *buffer,
 | 
				
			||||||
  write_impl(std::string api_path, const char *buffer, size_t write_size,
 | 
					                                size_t write_size, off_t write_offset,
 | 
				
			||||||
             off_t write_offset, struct fuse_file_info *file_info,
 | 
					                                struct fuse_file_info *file_info,
 | 
				
			||||||
             std::size_t &bytes_written) -> api_error override;
 | 
					                                std::size_t &bytes_written)
 | 
				
			||||||
 | 
					      -> api_error override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  [[nodiscard]] auto get_directory_item_count(const std::string &api_path) const
 | 
					  [[nodiscard]] auto get_directory_item_count(const std::string &api_path) const
 | 
				
			||||||
@@ -289,16 +295,17 @@ public:
 | 
				
			|||||||
  [[nodiscard]] auto get_directory_items(const std::string &api_path) const
 | 
					  [[nodiscard]] auto get_directory_items(const std::string &api_path) const
 | 
				
			||||||
      -> directory_item_list override;
 | 
					      -> directory_item_list override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto get_file_size(const std::string &api_path) const
 | 
				
			||||||
  get_file_size(const std::string &api_path) const -> std::uint64_t override;
 | 
					      -> std::uint64_t override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto get_item_meta(const std::string &api_path,
 | 
				
			||||||
  get_item_meta(const std::string &api_path,
 | 
					                                   api_meta_map &meta) const
 | 
				
			||||||
                api_meta_map &meta) const -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto get_item_meta(const std::string &api_path,
 | 
				
			||||||
  get_item_meta(const std::string &api_path, const std::string &name,
 | 
					                                   const std::string &name,
 | 
				
			||||||
                std::string &value) const -> api_error override;
 | 
					                                   std::string &value) const
 | 
				
			||||||
 | 
					      -> api_error override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto get_total_drive_space() const -> std::uint64_t override;
 | 
					  [[nodiscard]] auto get_total_drive_space() const -> std::uint64_t override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -309,21 +316,24 @@ public:
 | 
				
			|||||||
  void get_volume_info(UINT64 &total_size, UINT64 &free_size,
 | 
					  void get_volume_info(UINT64 &total_size, UINT64 &free_size,
 | 
				
			||||||
                       std::string &volume_label) const override;
 | 
					                       std::string &volume_label) const override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto is_processing(const std::string &api_path) const
 | 
				
			||||||
  is_processing(const std::string &api_path) const -> bool override;
 | 
					      -> bool override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto rename_directory(const std::string &from_api_path,
 | 
				
			||||||
  rename_directory(const std::string &from_api_path,
 | 
					                                      const std::string &to_api_path)
 | 
				
			||||||
                   const std::string &to_api_path) -> int override;
 | 
					      -> int override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto rename_file(const std::string &from_api_path,
 | 
					  [[nodiscard]] auto rename_file(const std::string &from_api_path,
 | 
				
			||||||
                                 const std::string &to_api_path,
 | 
					                                 const std::string &to_api_path, bool overwrite)
 | 
				
			||||||
                                 bool overwrite) -> int override;
 | 
					      -> int override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void set_item_meta(const std::string &api_path, const std::string &key,
 | 
					  void set_item_meta(const std::string &api_path, const std::string &key,
 | 
				
			||||||
                     const std::string &value) override;
 | 
					                     const std::string &value) override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void set_item_meta(const std::string &api_path,
 | 
				
			||||||
 | 
					                     const api_meta_map &meta) override;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
} // namespace repertory
 | 
					} // namespace repertory
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // _WIN32
 | 
					#endif // !defined(_WIN32)
 | 
				
			||||||
#endif // REPERTORY_INCLUDE_DRIVES_FUSE_FUSE_DRIVE_HPP_
 | 
					#endif // REPERTORY_INCLUDE_DRIVES_FUSE_FUSE_DRIVE_HPP_
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -43,16 +43,17 @@ public:
 | 
				
			|||||||
  auto operator=(fuse_drive_base &&) -> fuse_drive_base & = delete;
 | 
					  auto operator=(fuse_drive_base &&) -> fuse_drive_base & = delete;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
  [[nodiscard]] auto access_impl(std::string api_path,
 | 
					  [[nodiscard]] auto access_impl(std::string api_path, int mask)
 | 
				
			||||||
                                 int mask) -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
  [[nodiscard]] auto check_access(const std::string &api_path,
 | 
					  [[nodiscard]] auto check_access(const std::string &api_path, int mask) const
 | 
				
			||||||
                                  int mask) const -> api_error;
 | 
					      -> api_error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto check_and_perform(
 | 
					  [[nodiscard]] auto
 | 
				
			||||||
      const std::string &api_path, int parent_mask,
 | 
					  check_and_perform(const std::string &api_path, int parent_mask,
 | 
				
			||||||
      const std::function<api_error(api_meta_map &meta)> &action) -> api_error;
 | 
					                    const std::function<api_error(api_meta_map &meta)> &action)
 | 
				
			||||||
 | 
					      -> api_error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto get_current_gid() const -> gid_t;
 | 
					  [[nodiscard]] auto get_current_gid() const -> gid_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -62,58 +63,60 @@ protected:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto get_effective_uid() const -> uid_t;
 | 
					  [[nodiscard]] auto get_effective_uid() const -> uid_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] static auto
 | 
					  [[nodiscard]] static auto check_open_flags(int flags, int mask,
 | 
				
			||||||
  check_open_flags(int flags, int mask,
 | 
					                                             api_error fail_error) -> api_error;
 | 
				
			||||||
                   const api_error &fail_error) -> api_error;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto check_owner(const api_meta_map &meta) const -> api_error;
 | 
					  [[nodiscard]] auto check_owner(const api_meta_map &meta) const -> api_error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] static auto
 | 
					  [[nodiscard]] static auto check_readable(int flags, api_error fail_error)
 | 
				
			||||||
  check_readable(int flags, const api_error &fail_error) -> api_error;
 | 
					      -> api_error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] static auto
 | 
					  [[nodiscard]] static auto check_writeable(int flags, api_error fail_error)
 | 
				
			||||||
  check_writeable(int flags, const api_error &fail_error) -> api_error;
 | 
					      -> api_error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(__APPLE__)
 | 
					#if defined(__APPLE__)
 | 
				
			||||||
  [[nodiscard]] static auto
 | 
					  [[nodiscard]] static auto get_flags_from_meta(const api_meta_map &meta)
 | 
				
			||||||
  get_flags_from_meta(const api_meta_map &meta) -> __uint32_t;
 | 
					      -> __uint32_t;
 | 
				
			||||||
#endif // __APPLE__
 | 
					#endif // defined(__APPLE__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] static auto
 | 
					  [[nodiscard]] static auto get_gid_from_meta(const api_meta_map &meta)
 | 
				
			||||||
  get_gid_from_meta(const api_meta_map &meta) -> gid_t;
 | 
					      -> gid_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] static auto
 | 
					  [[nodiscard]] static auto get_mode_from_meta(const api_meta_map &meta)
 | 
				
			||||||
  get_mode_from_meta(const api_meta_map &meta) -> mode_t;
 | 
					      -> mode_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static void get_timespec_from_meta(const api_meta_map &meta,
 | 
					  static void get_timespec_from_meta(const api_meta_map &meta,
 | 
				
			||||||
                                     const std::string &name,
 | 
					                                     const std::string &name,
 | 
				
			||||||
                                     struct timespec &ts);
 | 
					                                     struct timespec &ts);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] static auto
 | 
					  [[nodiscard]] static auto get_uid_from_meta(const api_meta_map &meta)
 | 
				
			||||||
  get_uid_from_meta(const api_meta_map &meta) -> uid_t;
 | 
					      -> uid_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(__APPLE__)
 | 
					#if defined(__APPLE__)
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto parse_xattr_parameters(const char *name,
 | 
				
			||||||
  parse_xattr_parameters(const char *name, const uint32_t &position,
 | 
					                                            const uint32_t &position,
 | 
				
			||||||
                                            std::string &attribute_name,
 | 
					                                            std::string &attribute_name,
 | 
				
			||||||
                         const std::string &api_path) -> api_error;
 | 
					                                            const std::string &api_path)
 | 
				
			||||||
#else
 | 
					      -> api_error;
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					#else  // !defined(__APPLE__)
 | 
				
			||||||
  parse_xattr_parameters(const char *name, std::string &attribute_name,
 | 
					  [[nodiscard]] auto parse_xattr_parameters(const char *name,
 | 
				
			||||||
                         const std::string &api_path) -> api_error;
 | 
					                                            std::string &attribute_name,
 | 
				
			||||||
#endif
 | 
					                                            const std::string &api_path)
 | 
				
			||||||
 | 
					      -> api_error;
 | 
				
			||||||
 | 
					#endif // defined(__APPLE__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(__APPLE__)
 | 
					#if defined(__APPLE__)
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto
 | 
				
			||||||
  parse_xattr_parameters(const char *name, const char *value, size_t size,
 | 
					  parse_xattr_parameters(const char *name, const char *value, size_t size,
 | 
				
			||||||
                         const uint32_t &position, std::string &attribute_name,
 | 
					                         const uint32_t &position, std::string &attribute_name,
 | 
				
			||||||
                         const std::string &api_path) -> api_error;
 | 
					                         const std::string &api_path) -> api_error;
 | 
				
			||||||
#else
 | 
					#else  // !defined(__APPLE__)
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto parse_xattr_parameters(const char *name, const char *value,
 | 
				
			||||||
  parse_xattr_parameters(const char *name, const char *value, size_t size,
 | 
					                                            size_t size,
 | 
				
			||||||
                                            std::string &attribute_name,
 | 
					                                            std::string &attribute_name,
 | 
				
			||||||
                         const std::string &api_path) -> api_error;
 | 
					                                            const std::string &api_path)
 | 
				
			||||||
#endif
 | 
					      -> api_error;
 | 
				
			||||||
 | 
					#endif // defined(__APPLE__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static void populate_stat(const std::string &api_path,
 | 
					  static void populate_stat(const std::string &api_path,
 | 
				
			||||||
                            std::uint64_t size_or_count,
 | 
					                            std::uint64_t size_or_count,
 | 
				
			||||||
@@ -125,13 +128,13 @@ protected:
 | 
				
			|||||||
                                     struct timespec &ts);
 | 
					                                     struct timespec &ts);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto check_owner(const std::string &api_path) const
 | 
				
			||||||
  check_owner(const std::string &api_path) const -> api_error override;
 | 
					      -> api_error override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto check_parent_access(const std::string &api_path,
 | 
					  [[nodiscard]] auto check_parent_access(const std::string &api_path,
 | 
				
			||||||
                                         int mask) const -> api_error override;
 | 
					                                         int mask) const -> api_error override;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
} // namespace repertory
 | 
					} // namespace repertory
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // _WIN32
 | 
					#endif // !defined(_WIN32)
 | 
				
			||||||
#endif // REPERTORY_INCLUDE_DRIVES_FUSE_FUSE_DRIVE_BASE_HPP_
 | 
					#endif // REPERTORY_INCLUDE_DRIVES_FUSE_FUSE_DRIVE_BASE_HPP_
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,29 +30,32 @@ class i_fuse_drive {
 | 
				
			|||||||
  INTERFACE_SETUP(i_fuse_drive);
 | 
					  INTERFACE_SETUP(i_fuse_drive);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto check_owner(const std::string &api_path) const
 | 
				
			||||||
  check_owner(const std::string &api_path) const -> api_error = 0;
 | 
					      -> api_error = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] virtual auto check_parent_access(const std::string &api_path,
 | 
				
			||||||
 | 
					                                                 int mask) const
 | 
				
			||||||
 | 
					      -> api_error = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto
 | 
				
			||||||
  check_parent_access(const std::string &api_path,
 | 
					  get_directory_item_count(const std::string &api_path) const
 | 
				
			||||||
                      int mask) const -> api_error = 0;
 | 
					      -> std::uint64_t = 0;
 | 
				
			||||||
 | 
					 | 
				
			||||||
  [[nodiscard]] virtual auto get_directory_item_count(
 | 
					 | 
				
			||||||
      const std::string &api_path) const -> std::uint64_t = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  [[nodiscard]] virtual auto get_directory_items(
 | 
					 | 
				
			||||||
      const std::string &api_path) const -> directory_item_list = 0;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto
 | 
				
			||||||
  get_file_size(const std::string &api_path) const -> std::uint64_t = 0;
 | 
					  get_directory_items(const std::string &api_path) const
 | 
				
			||||||
 | 
					      -> directory_item_list = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto get_file_size(const std::string &api_path) const
 | 
				
			||||||
  get_item_meta(const std::string &api_path,
 | 
					      -> std::uint64_t = 0;
 | 
				
			||||||
                api_meta_map &meta) const -> api_error = 0;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto get_item_meta(const std::string &api_path,
 | 
				
			||||||
  get_item_meta(const std::string &api_path, const std::string &name,
 | 
					                                           api_meta_map &meta) const
 | 
				
			||||||
                std::string &value) const -> api_error = 0;
 | 
					      -> api_error = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] virtual auto get_item_meta(const std::string &api_path,
 | 
				
			||||||
 | 
					                                           const std::string &name,
 | 
				
			||||||
 | 
					                                           std::string &value) const
 | 
				
			||||||
 | 
					      -> api_error = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto get_total_drive_space() const -> std::uint64_t = 0;
 | 
					  [[nodiscard]] virtual auto get_total_drive_space() const -> std::uint64_t = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -63,12 +66,12 @@ public:
 | 
				
			|||||||
  virtual void get_volume_info(UINT64 &total_size, UINT64 &free_size,
 | 
					  virtual void get_volume_info(UINT64 &total_size, UINT64 &free_size,
 | 
				
			||||||
                               std::string &volume_label) const = 0;
 | 
					                               std::string &volume_label) const = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto is_processing(const std::string &api_path) const
 | 
				
			||||||
  is_processing(const std::string &api_path) const -> bool = 0;
 | 
					      -> bool = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto
 | 
					  [[nodiscard]] virtual auto rename_directory(const std::string &from_api_path,
 | 
				
			||||||
  rename_directory(const std::string &from_api_path,
 | 
					                                              const std::string &to_api_path)
 | 
				
			||||||
                   const std::string &to_api_path) -> int = 0;
 | 
					      -> int = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] virtual auto rename_file(const std::string &from_api_path,
 | 
					  [[nodiscard]] virtual auto rename_file(const std::string &from_api_path,
 | 
				
			||||||
                                         const std::string &to_api_path,
 | 
					                                         const std::string &to_api_path,
 | 
				
			||||||
@@ -77,8 +80,11 @@ public:
 | 
				
			|||||||
  virtual void set_item_meta(const std::string &api_path,
 | 
					  virtual void set_item_meta(const std::string &api_path,
 | 
				
			||||||
                             const std::string &key,
 | 
					                             const std::string &key,
 | 
				
			||||||
                             const std::string &value) = 0;
 | 
					                             const std::string &value) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  virtual void set_item_meta(const std::string &api_path,
 | 
				
			||||||
 | 
					                             const api_meta_map &meta) = 0;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
} // namespace repertory
 | 
					} // namespace repertory
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif // !defined(_WIN32)
 | 
				
			||||||
#endif // REPERTORY_INCLUDE_DRIVES_FUSE_I_FUSE_DRIVE_HPP_
 | 
					#endif // REPERTORY_INCLUDE_DRIVES_FUSE_I_FUSE_DRIVE_HPP_
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,10 +38,12 @@ public:
 | 
				
			|||||||
private:
 | 
					private:
 | 
				
			||||||
  const app_config &config_;
 | 
					  const app_config &config_;
 | 
				
			||||||
  packet_client packet_client_;
 | 
					  packet_client packet_client_;
 | 
				
			||||||
  remote::user_id uid_ = 0;
 | 
					  remote::user_id uid_{0};
 | 
				
			||||||
  remote::group_id gid_ = 0;
 | 
					  remote::group_id gid_{0};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
 | 
					  [[nodiscard]] auto check() -> packet::error_type;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto fuse_access(const char *path, const std::int32_t &mask)
 | 
					  [[nodiscard]] auto fuse_access(const char *path, const std::int32_t &mask)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -51,9 +53,9 @@ public:
 | 
				
			|||||||
  [[nodiscard]] auto fuse_chmod(const char *path, const remote::file_mode &mode)
 | 
					  [[nodiscard]] auto fuse_chmod(const char *path, const remote::file_mode &mode)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto fuse_chown(const char *path, const remote::user_id &uid,
 | 
				
			||||||
  fuse_chown(const char *path, const remote::user_id &uid,
 | 
					                                const remote::group_id &gid)
 | 
				
			||||||
             const remote::group_id &gid) -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto fuse_destroy() -> packet::error_type override;
 | 
					  [[nodiscard]] auto fuse_destroy() -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -67,21 +69,23 @@ public:
 | 
				
			|||||||
                const remote::file_handle &handle)
 | 
					                const remote::file_handle &handle)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto fuse_fsetattr_x(
 | 
					  [[nodiscard]] auto fuse_fsetattr_x(const char *path,
 | 
				
			||||||
      const char *path, const remote::setattr_x &attr,
 | 
					                                     const remote::setattr_x &attr,
 | 
				
			||||||
      const remote::file_handle &handle) -> packet::error_type override;
 | 
					                                     const remote::file_handle &handle)
 | 
				
			||||||
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto fuse_fsync(const char *path, const std::int32_t &datasync,
 | 
				
			||||||
  fuse_fsync(const char *path, const std::int32_t &datasync,
 | 
					                                const remote::file_handle &handle)
 | 
				
			||||||
             const remote::file_handle &handle) -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto fuse_ftruncate(
 | 
					  [[nodiscard]] auto fuse_ftruncate(const char *path,
 | 
				
			||||||
      const char *path, const remote::file_offset &size,
 | 
					                                    const remote::file_offset &size,
 | 
				
			||||||
      const remote::file_handle &handle) -> packet::error_type override;
 | 
					                                    const remote::file_handle &handle)
 | 
				
			||||||
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto fuse_getattr(const char *path, remote::stat &st,
 | 
				
			||||||
  fuse_getattr(const char *path, remote::stat &st,
 | 
					                                  bool &directory)
 | 
				
			||||||
               bool &directory) -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /*[[nodiscard]] packet::error_type fuse_getxattr(const char *path, const char
 | 
					  /*[[nodiscard]] packet::error_type fuse_getxattr(const char *path, const char
 | 
				
			||||||
  *name, char *value, const remote::file_size &size) override ;
 | 
					  *name, char *value, const remote::file_size &size) override ;
 | 
				
			||||||
@@ -90,9 +94,10 @@ public:
 | 
				
			|||||||
  *name, char *value, const remote::file_size &size, std::uint32_t position)
 | 
					  *name, char *value, const remote::file_size &size, std::uint32_t position)
 | 
				
			||||||
  override ;*/
 | 
					  override ;*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto fuse_getxtimes(const char *path,
 | 
				
			||||||
  fuse_getxtimes(const char *path, remote::file_time &bkuptime,
 | 
					                                    remote::file_time &bkuptime,
 | 
				
			||||||
                 remote::file_time &crtime) -> packet::error_type override;
 | 
					                                    remote::file_time &crtime)
 | 
				
			||||||
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto fuse_init() -> packet::error_type override;
 | 
					  [[nodiscard]] auto fuse_init() -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -107,25 +112,27 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto
 | 
				
			||||||
  fuse_create(const char *path, const remote::file_mode &mode,
 | 
					  fuse_create(const char *path, const remote::file_mode &mode,
 | 
				
			||||||
 | 
					              const remote::open_flags &flags, remote::file_handle &handle)
 | 
				
			||||||
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] auto fuse_open(const char *path,
 | 
				
			||||||
                               const remote::open_flags &flags,
 | 
					                               const remote::open_flags &flags,
 | 
				
			||||||
              remote::file_handle &handle) -> packet::error_type override;
 | 
					                               remote::file_handle &handle)
 | 
				
			||||||
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto fuse_read(const char *path, char *buffer,
 | 
				
			||||||
  fuse_open(const char *path, const remote::open_flags &flags,
 | 
					                               const remote::file_size &read_size,
 | 
				
			||||||
            remote::file_handle &handle) -> packet::error_type override;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  [[nodiscard]] auto
 | 
					 | 
				
			||||||
  fuse_read(const char *path, char *buffer, const remote::file_size &read_size,
 | 
					 | 
				
			||||||
                               const remote::file_offset &read_offset,
 | 
					                               const remote::file_offset &read_offset,
 | 
				
			||||||
            const remote::file_handle &handle) -> packet::error_type override;
 | 
					                               const remote::file_handle &handle)
 | 
				
			||||||
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto fuse_rename(const char *from,
 | 
					  [[nodiscard]] auto fuse_rename(const char *from, const char *to)
 | 
				
			||||||
                                 const char *to) -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto
 | 
				
			||||||
  fuse_readdir(const char *path, const remote::file_offset &offset,
 | 
					  fuse_readdir(const char *path, const remote::file_offset &offset,
 | 
				
			||||||
               const remote::file_handle &handle,
 | 
					               const remote::file_handle &handle, std::string &item_path)
 | 
				
			||||||
               std::string &item_path) -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto fuse_release(const char *path,
 | 
					  [[nodiscard]] auto fuse_release(const char *path,
 | 
				
			||||||
                                  const remote::file_handle &handle)
 | 
					                                  const remote::file_handle &handle)
 | 
				
			||||||
@@ -139,8 +146,8 @@ public:
 | 
				
			|||||||
   * char *name) override
 | 
					   * char *name) override
 | 
				
			||||||
   * ;*/
 | 
					   * ;*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto fuse_rmdir(const char *path)
 | 
				
			||||||
  fuse_rmdir(const char *path) -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto fuse_setattr_x(const char *path, remote::setattr_x &attr)
 | 
					  [[nodiscard]] auto fuse_setattr_x(const char *path, remote::setattr_x &attr)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
@@ -157,8 +164,8 @@ public:
 | 
				
			|||||||
                                    const remote::file_time &crtime)
 | 
					                                    const remote::file_time &crtime)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto fuse_setvolname(const char *volname)
 | 
				
			||||||
  fuse_setvolname(const char *volname) -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] /*packet::error_type fuse_setxattr(const char *path, const char
 | 
					  [[nodiscard]] /*packet::error_type fuse_setxattr(const char *path, const char
 | 
				
			||||||
  *name, const char *value, const remote::file_size &size, const std::int32_t
 | 
					  *name, const char *value, const remote::file_size &size, const std::int32_t
 | 
				
			||||||
@@ -169,45 +176,48 @@ public:
 | 
				
			|||||||
  std::int32_t &flags, std::uint32_t position) override ;*/
 | 
					  std::int32_t &flags, std::uint32_t position) override ;*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto
 | 
				
			||||||
  fuse_statfs(const char *path, std::uint64_t frsize,
 | 
					  fuse_statfs(const char *path, std::uint64_t frsize, remote::statfs &st)
 | 
				
			||||||
              remote::statfs &st) -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto fuse_statfs_x(const char *path, std::uint64_t bsize,
 | 
				
			||||||
  fuse_statfs_x(const char *path, std::uint64_t bsize,
 | 
					                                   remote::statfs_x &st)
 | 
				
			||||||
                remote::statfs_x &st) -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto fuse_truncate(const char *path,
 | 
				
			||||||
  fuse_truncate(const char *path,
 | 
					                                   const remote::file_offset &size)
 | 
				
			||||||
                const remote::file_offset &size) -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto fuse_unlink(const char *path)
 | 
				
			||||||
  fuse_unlink(const char *path) -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto fuse_utimens(const char *path, const remote::file_time *tv,
 | 
				
			||||||
  fuse_utimens(const char *path, const remote::file_time *tv, std::uint64_t op0,
 | 
					                                  std::uint64_t op0, std::uint64_t op1)
 | 
				
			||||||
               std::uint64_t op1) -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto
 | 
					  [[nodiscard]] auto fuse_write(const char *path, const char *buffer,
 | 
				
			||||||
  fuse_write(const char *path, const char *buffer,
 | 
					 | 
				
			||||||
                                const remote::file_size &write_size,
 | 
					                                const remote::file_size &write_size,
 | 
				
			||||||
                                const remote::file_offset &write_offset,
 | 
					                                const remote::file_offset &write_offset,
 | 
				
			||||||
             const remote::file_handle &handle) -> packet::error_type override;
 | 
					                                const remote::file_handle &handle)
 | 
				
			||||||
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto fuse_write_base64(
 | 
					  [[nodiscard]] auto fuse_write_base64(const char *path, const char *buffer,
 | 
				
			||||||
      const char *path, const char *buffer, const remote::file_size &write_size,
 | 
					                                       const remote::file_size &write_size,
 | 
				
			||||||
                                       const remote::file_offset &write_offset,
 | 
					                                       const remote::file_offset &write_offset,
 | 
				
			||||||
      const remote::file_handle &handle) -> packet::error_type override;
 | 
					                                       const remote::file_handle &handle)
 | 
				
			||||||
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto json_create_directory_snapshot(
 | 
					  [[nodiscard]] auto json_create_directory_snapshot(const std::string &path,
 | 
				
			||||||
      const std::string &path, json &json_data) -> packet::error_type override;
 | 
					                                                    json &json_data)
 | 
				
			||||||
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto json_read_directory_snapshot(
 | 
					  [[nodiscard]] auto json_read_directory_snapshot(
 | 
				
			||||||
      const std::string &path, const remote::file_handle &handle,
 | 
					      const std::string &path, const remote::file_handle &handle,
 | 
				
			||||||
      std::uint32_t page, json &json_data) -> packet::error_type override;
 | 
					      std::uint32_t page, json &json_data) -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto json_release_directory_snapshot(
 | 
					  [[nodiscard]] auto
 | 
				
			||||||
      const std::string &path,
 | 
					  json_release_directory_snapshot(const std::string &path,
 | 
				
			||||||
      const remote::file_handle &handle) -> packet::error_type override;
 | 
					                                  const remote::file_handle &handle)
 | 
				
			||||||
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void set_fuse_uid_gid(const remote::user_id &uid,
 | 
					  void set_fuse_uid_gid(const remote::user_id &uid,
 | 
				
			||||||
                        const remote::group_id &gid) override;
 | 
					                        const remote::group_id &gid) override;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -59,7 +59,8 @@ private:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  static void populate_stat(const struct stat64 &unix_st, remote::stat &r_stat);
 | 
					  static void populate_stat(const struct stat64 &unix_st, remote::stat &r_stat);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto update_to_windows_format(json &item) -> json &;
 | 
					  [[nodiscard]] auto update_to_windows_format(const std::string &root_api_path,
 | 
				
			||||||
 | 
					                                              json &item) -> json &;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  // FUSE Layer
 | 
					  // FUSE Layer
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -29,87 +29,92 @@ class i_remote_instance : public virtual i_remote_json {
 | 
				
			|||||||
  INTERFACE_SETUP(i_remote_instance);
 | 
					  INTERFACE_SETUP(i_remote_instance);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  virtual auto winfsp_can_delete(PVOID file_desc, PWSTR file_name)
 | 
					  [[nodiscard]] virtual auto winfsp_can_delete(PVOID file_desc, PWSTR file_name)
 | 
				
			||||||
      -> packet::error_type = 0;
 | 
					      -> packet::error_type = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  virtual auto winfsp_cleanup(PVOID file_desc, PWSTR file_name, UINT32 flags,
 | 
					  [[nodiscard]] virtual auto winfsp_cleanup(PVOID file_desc, PWSTR file_name,
 | 
				
			||||||
                              BOOLEAN &was_deleted) -> packet::error_type = 0;
 | 
					                                            UINT32 flags, BOOLEAN &was_deleted)
 | 
				
			||||||
 | 
					      -> packet::error_type = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  virtual auto winfsp_close(PVOID file_desc) -> packet::error_type = 0;
 | 
					  [[nodiscard]] virtual auto winfsp_close(PVOID file_desc)
 | 
				
			||||||
 | 
					      -> packet::error_type = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  virtual auto winfsp_create(PWSTR file_name, UINT32 create_options,
 | 
					  [[nodiscard]] virtual auto
 | 
				
			||||||
                             UINT32 granted_access, UINT32 file_attributes,
 | 
					  winfsp_create(PWSTR file_name, UINT32 create_options, UINT32 granted_access,
 | 
				
			||||||
                             UINT64 allocation_size, PVOID *file_desc,
 | 
					                UINT32 file_attributes, UINT64 allocation_size,
 | 
				
			||||||
                             remote::file_info *file_info,
 | 
					                PVOID *file_desc, remote::file_info *file_info,
 | 
				
			||||||
                std::string &normalized_name, BOOLEAN &exists)
 | 
					                std::string &normalized_name, BOOLEAN &exists)
 | 
				
			||||||
      -> packet::error_type = 0;
 | 
					      -> packet::error_type = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  virtual auto winfsp_flush(PVOID file_desc, remote::file_info *file_info)
 | 
					  [[nodiscard]] virtual auto winfsp_flush(PVOID file_desc,
 | 
				
			||||||
      -> packet::error_type = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  virtual auto winfsp_get_dir_buffer(PVOID file_desc, PVOID *&ptr)
 | 
					 | 
				
			||||||
      -> packet::error_type = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  virtual auto winfsp_get_file_info(PVOID file_desc,
 | 
					 | 
				
			||||||
                                          remote::file_info *file_info)
 | 
					                                          remote::file_info *file_info)
 | 
				
			||||||
      -> packet::error_type = 0;
 | 
					      -> packet::error_type = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  virtual auto
 | 
					  [[nodiscard]] virtual auto winfsp_get_dir_buffer(PVOID file_desc, PVOID *&ptr)
 | 
				
			||||||
 | 
					      -> packet::error_type = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] virtual auto winfsp_get_file_info(PVOID file_desc,
 | 
				
			||||||
 | 
					                                                  remote::file_info *file_info)
 | 
				
			||||||
 | 
					      -> packet::error_type = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] virtual auto
 | 
				
			||||||
  winfsp_get_security_by_name(PWSTR file_name, PUINT32 file_attributes,
 | 
					  winfsp_get_security_by_name(PWSTR file_name, PUINT32 file_attributes,
 | 
				
			||||||
                              std::uint64_t *security_descriptor_size,
 | 
					                              std::uint64_t *security_descriptor_size,
 | 
				
			||||||
                              std::wstring &str_descriptor)
 | 
					                              std::wstring &str_descriptor)
 | 
				
			||||||
      -> packet::error_type = 0;
 | 
					      -> packet::error_type = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  virtual auto winfsp_get_volume_info(UINT64 &total_size, UINT64 &free_size,
 | 
					  [[nodiscard]] virtual auto winfsp_get_volume_info(UINT64 &total_size,
 | 
				
			||||||
 | 
					                                                    UINT64 &free_size,
 | 
				
			||||||
                                                    std::string &volume_label)
 | 
					                                                    std::string &volume_label)
 | 
				
			||||||
      -> packet::error_type = 0;
 | 
					      -> packet::error_type = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  virtual auto winfsp_mounted(const std::wstring &location)
 | 
					  [[nodiscard]] virtual auto winfsp_mounted(const std::wstring &location)
 | 
				
			||||||
      -> packet::error_type = 0;
 | 
					      -> packet::error_type = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  virtual auto winfsp_open(PWSTR file_name, UINT32 create_options,
 | 
					  [[nodiscard]] virtual auto
 | 
				
			||||||
                           UINT32 granted_access, PVOID *file_desc,
 | 
					  winfsp_open(PWSTR file_name, UINT32 create_options, UINT32 granted_access,
 | 
				
			||||||
                           remote::file_info *file_info,
 | 
					              PVOID *file_desc, remote::file_info *file_info,
 | 
				
			||||||
                           std::string &normalized_name)
 | 
					              std::string &normalized_name) -> packet::error_type = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] virtual auto
 | 
				
			||||||
 | 
					  winfsp_overwrite(PVOID file_desc, UINT32 file_attributes,
 | 
				
			||||||
 | 
					                   BOOLEAN replace_file_attributes, UINT64 allocation_size,
 | 
				
			||||||
 | 
					                   remote::file_info *file_info) -> packet::error_type = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] virtual auto winfsp_read(PVOID file_desc, PVOID buffer,
 | 
				
			||||||
 | 
					                                         UINT64 offset, UINT32 length,
 | 
				
			||||||
 | 
					                                         PUINT32 bytes_transferred)
 | 
				
			||||||
      -> packet::error_type = 0;
 | 
					      -> packet::error_type = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  virtual auto winfsp_overwrite(PVOID file_desc, UINT32 file_attributes,
 | 
					  [[nodiscard]] virtual auto winfsp_read_directory(PVOID file_desc,
 | 
				
			||||||
                                BOOLEAN replace_file_attributes,
 | 
					                                                   PWSTR pattern, PWSTR marker,
 | 
				
			||||||
                                UINT64 allocation_size,
 | 
					                                                   json &itemList)
 | 
				
			||||||
                                remote::file_info *file_info)
 | 
					 | 
				
			||||||
      -> packet::error_type = 0;
 | 
					      -> packet::error_type = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  virtual auto winfsp_read(PVOID file_desc, PVOID buffer, UINT64 offset,
 | 
					  [[nodiscard]] virtual auto winfsp_rename(PVOID file_desc, PWSTR file_name,
 | 
				
			||||||
                           UINT32 length, PUINT32 bytes_transferred)
 | 
					                                           PWSTR new_file_name,
 | 
				
			||||||
 | 
					                                           BOOLEAN replace_if_exists)
 | 
				
			||||||
      -> packet::error_type = 0;
 | 
					      -> packet::error_type = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  virtual auto winfsp_read_directory(PVOID file_desc, PWSTR pattern,
 | 
					  [[nodiscard]] virtual auto
 | 
				
			||||||
                                     PWSTR marker, json &itemList)
 | 
					  winfsp_set_basic_info(PVOID file_desc, UINT32 file_attributes,
 | 
				
			||||||
      -> packet::error_type = 0;
 | 
					                        UINT64 creation_time, UINT64 last_access_time,
 | 
				
			||||||
 | 
					 | 
				
			||||||
  virtual auto winfsp_rename(PVOID file_desc, PWSTR file_name,
 | 
					 | 
				
			||||||
                             PWSTR new_file_name, BOOLEAN replace_if_exists)
 | 
					 | 
				
			||||||
      -> packet::error_type = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  virtual auto winfsp_set_basic_info(PVOID file_desc, UINT32 file_attributes,
 | 
					 | 
				
			||||||
                                     UINT64 creation_time,
 | 
					 | 
				
			||||||
                                     UINT64 last_access_time,
 | 
					 | 
				
			||||||
                        UINT64 last_write_time, UINT64 change_time,
 | 
					                        UINT64 last_write_time, UINT64 change_time,
 | 
				
			||||||
                                     remote::file_info *file_info)
 | 
					                        remote::file_info *file_info) -> packet::error_type = 0;
 | 
				
			||||||
      -> packet::error_type = 0;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  virtual auto winfsp_set_file_size(PVOID file_desc, UINT64 new_size,
 | 
					  [[nodiscard]] virtual auto winfsp_set_file_size(PVOID file_desc,
 | 
				
			||||||
 | 
					                                                  UINT64 new_size,
 | 
				
			||||||
                                                  BOOLEAN set_allocation_size,
 | 
					                                                  BOOLEAN set_allocation_size,
 | 
				
			||||||
                                                  remote::file_info *file_info)
 | 
					                                                  remote::file_info *file_info)
 | 
				
			||||||
      -> packet::error_type = 0;
 | 
					      -> packet::error_type = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  virtual auto winfsp_unmounted(const std::wstring &location)
 | 
					  [[nodiscard]] virtual auto winfsp_unmounted(const std::wstring &location)
 | 
				
			||||||
      -> packet::error_type = 0;
 | 
					      -> packet::error_type = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  virtual auto winfsp_write(PVOID file_desc, PVOID buffer, UINT64 offset,
 | 
					  [[nodiscard]] virtual auto
 | 
				
			||||||
                            UINT32 length, BOOLEAN write_to_end,
 | 
					  winfsp_write(PVOID file_desc, PVOID buffer, UINT64 offset, UINT32 length,
 | 
				
			||||||
                            BOOLEAN constrained_io, PUINT32 bytes_transferred,
 | 
					               BOOLEAN write_to_end, BOOLEAN constrained_io,
 | 
				
			||||||
                            remote::file_info *file_info)
 | 
					               PUINT32 bytes_transferred, remote::file_info *file_info)
 | 
				
			||||||
      -> packet::error_type = 0;
 | 
					      -> packet::error_type = 0;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -44,91 +44,103 @@ private:
 | 
				
			|||||||
#if defined(_WIN32)
 | 
					#if defined(_WIN32)
 | 
				
			||||||
#define to_handle(x) (x)
 | 
					#define to_handle(x) (x)
 | 
				
			||||||
#else  // !defined(_WIN32)
 | 
					#else  // !defined(_WIN32)
 | 
				
			||||||
  static auto to_handle(PVOID file_desc) -> native_handle;
 | 
					  [[nodiscard]] static auto to_handle(PVOID file_desc) -> native_handle;
 | 
				
			||||||
#endif // defined(_WIN32)
 | 
					#endif // defined(_WIN32)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  auto json_create_directory_snapshot(const std::string &path, json &json_data)
 | 
					  [[nodiscard]] auto check() -> packet::error_type;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] auto json_create_directory_snapshot(const std::string &path,
 | 
				
			||||||
 | 
					                                                    json &json_data)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto json_read_directory_snapshot(const std::string &path,
 | 
					  [[nodiscard]] auto json_read_directory_snapshot(
 | 
				
			||||||
                                    const remote::file_handle &handle,
 | 
					      const std::string &path, const remote::file_handle &handle,
 | 
				
			||||||
                                    std::uint32_t page, json &json_data)
 | 
					      std::uint32_t page, json &json_data) -> packet::error_type override;
 | 
				
			||||||
      -> packet::error_type override;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto json_release_directory_snapshot(const std::string &path,
 | 
					  [[nodiscard]] auto
 | 
				
			||||||
 | 
					  json_release_directory_snapshot(const std::string &path,
 | 
				
			||||||
                                  const remote::file_handle &handle)
 | 
					                                  const remote::file_handle &handle)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_can_delete(PVOID file_desc, PWSTR file_name)
 | 
					  [[nodiscard]] auto winfsp_can_delete(PVOID file_desc, PWSTR file_name)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_cleanup(PVOID file_desc, PWSTR file_name, UINT32 flags,
 | 
					  [[nodiscard]] auto winfsp_cleanup(PVOID file_desc, PWSTR file_name,
 | 
				
			||||||
                      BOOLEAN &was_deleted) -> packet::error_type override;
 | 
					                                    UINT32 flags, BOOLEAN &was_deleted)
 | 
				
			||||||
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_close(PVOID file_desc) -> packet::error_type override;
 | 
					  [[nodiscard]] auto winfsp_close(PVOID file_desc)
 | 
				
			||||||
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_create(PWSTR file_name, UINT32 create_options,
 | 
					  [[nodiscard]] auto
 | 
				
			||||||
                     UINT32 granted_access, UINT32 attributes,
 | 
					  winfsp_create(PWSTR file_name, UINT32 create_options, UINT32 granted_access,
 | 
				
			||||||
                     UINT64 allocation_size, PVOID *file_desc,
 | 
					                UINT32 attributes, UINT64 allocation_size, PVOID *file_desc,
 | 
				
			||||||
                remote::file_info *file_info, std::string &normalized_name,
 | 
					                remote::file_info *file_info, std::string &normalized_name,
 | 
				
			||||||
                BOOLEAN &exists) -> packet::error_type override;
 | 
					                BOOLEAN &exists) -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_flush(PVOID file_desc, remote::file_info *file_info)
 | 
					  [[nodiscard]] auto winfsp_flush(PVOID file_desc, remote::file_info *file_info)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_get_dir_buffer(PVOID file_desc, PVOID *&ptr)
 | 
					  [[nodiscard]] auto winfsp_get_dir_buffer(PVOID file_desc, PVOID *&ptr)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_get_file_info(PVOID file_desc, remote::file_info *file_info)
 | 
					  [[nodiscard]] auto winfsp_get_file_info(PVOID file_desc,
 | 
				
			||||||
 | 
					                                          remote::file_info *file_info)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_get_security_by_name(PWSTR file_name, PUINT32 attributes,
 | 
					  [[nodiscard]] auto winfsp_get_security_by_name(
 | 
				
			||||||
                                   std::uint64_t *descriptor_size,
 | 
					      PWSTR file_name, PUINT32 attributes, std::uint64_t *descriptor_size,
 | 
				
			||||||
                                   std::wstring &string_descriptor)
 | 
					      std::wstring &string_descriptor) -> packet::error_type override;
 | 
				
			||||||
      -> packet::error_type override;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_get_volume_info(UINT64 &total_size, UINT64 &free_size,
 | 
					  [[nodiscard]] auto winfsp_get_volume_info(UINT64 &total_size,
 | 
				
			||||||
 | 
					                                            UINT64 &free_size,
 | 
				
			||||||
                                            std::string &volume_label)
 | 
					                                            std::string &volume_label)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_mounted(const std::wstring &location)
 | 
					  [[nodiscard]] auto winfsp_mounted(const std::wstring &location)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_open(PWSTR file_name, UINT32 create_options,
 | 
					  [[nodiscard]] auto winfsp_open(PWSTR file_name, UINT32 create_options,
 | 
				
			||||||
                                 UINT32 granted_access, PVOID *file_desc,
 | 
					                                 UINT32 granted_access, PVOID *file_desc,
 | 
				
			||||||
                   remote::file_info *file_info, std::string &normalized_name)
 | 
					                                 remote::file_info *file_info,
 | 
				
			||||||
 | 
					                                 std::string &normalized_name)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_overwrite(PVOID file_desc, UINT32 attributes,
 | 
					  [[nodiscard]] auto winfsp_overwrite(PVOID file_desc, UINT32 attributes,
 | 
				
			||||||
                        BOOLEAN replace_attributes, UINT64 allocation_size,
 | 
					                                      BOOLEAN replace_attributes,
 | 
				
			||||||
 | 
					                                      UINT64 allocation_size,
 | 
				
			||||||
                                      remote::file_info *file_info)
 | 
					                                      remote::file_info *file_info)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_read(PVOID file_desc, PVOID buffer, UINT64 offset, UINT32 length,
 | 
					  [[nodiscard]] auto winfsp_read(PVOID file_desc, PVOID buffer, UINT64 offset,
 | 
				
			||||||
                   PUINT32 bytes_transferred) -> packet::error_type override;
 | 
					                                 UINT32 length, PUINT32 bytes_transferred)
 | 
				
			||||||
 | 
					 | 
				
			||||||
  auto winfsp_read_directory(PVOID file_desc, PWSTR pattern, PWSTR marker,
 | 
					 | 
				
			||||||
                             json &itemList) -> packet::error_type override;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  auto winfsp_rename(PVOID file_desc, PWSTR file_name, PWSTR new_file_name,
 | 
					 | 
				
			||||||
                     BOOLEAN replace_if_exists) -> packet::error_type override;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  auto winfsp_set_basic_info(PVOID file_desc, UINT32 attributes,
 | 
					 | 
				
			||||||
                             UINT64 creation_time, UINT64 last_access_time,
 | 
					 | 
				
			||||||
                             UINT64 last_write_time, UINT64 change_time,
 | 
					 | 
				
			||||||
                             remote::file_info *file_info)
 | 
					 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_set_file_size(PVOID file_desc, UINT64 new_size,
 | 
					  [[nodiscard]] auto winfsp_read_directory(PVOID file_desc, PWSTR pattern,
 | 
				
			||||||
 | 
					                                           PWSTR marker, json &itemList)
 | 
				
			||||||
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] auto winfsp_rename(PVOID file_desc, PWSTR file_name,
 | 
				
			||||||
 | 
					                                   PWSTR new_file_name,
 | 
				
			||||||
 | 
					                                   BOOLEAN replace_if_exists)
 | 
				
			||||||
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] auto winfsp_set_basic_info(
 | 
				
			||||||
 | 
					      PVOID file_desc, UINT32 attributes, UINT64 creation_time,
 | 
				
			||||||
 | 
					      UINT64 last_access_time, UINT64 last_write_time, UINT64 change_time,
 | 
				
			||||||
 | 
					      remote::file_info *file_info) -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] auto winfsp_set_file_size(PVOID file_desc, UINT64 new_size,
 | 
				
			||||||
                                          BOOLEAN set_allocation_size,
 | 
					                                          BOOLEAN set_allocation_size,
 | 
				
			||||||
                                          remote::file_info *file_info)
 | 
					                                          remote::file_info *file_info)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_unmounted(const std::wstring &location)
 | 
					  [[nodiscard]] auto winfsp_unmounted(const std::wstring &location)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_write(PVOID file_desc, PVOID buffer, UINT64 offset, UINT32 length,
 | 
					  [[nodiscard]] auto
 | 
				
			||||||
 | 
					  winfsp_write(PVOID file_desc, PVOID buffer, UINT64 offset, UINT32 length,
 | 
				
			||||||
               BOOLEAN write_to_end, BOOLEAN constrained_io,
 | 
					               BOOLEAN write_to_end, BOOLEAN constrained_io,
 | 
				
			||||||
               PUINT32 bytes_transferred, remote::file_info *file_info)
 | 
					               PUINT32 bytes_transferred, remote::file_info *file_info)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -58,41 +58,46 @@ private:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  // FUSE Layer
 | 
					  // FUSE Layer
 | 
				
			||||||
  auto fuse_access(const char *path, const std::int32_t &mask)
 | 
					  [[nodiscard]] auto fuse_access(const char *path, const std::int32_t &mask)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_chflags(const char *path, std::uint32_t flags)
 | 
					  [[nodiscard]] auto fuse_chflags(const char *path, std::uint32_t flags)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_chmod(const char *path, const remote::file_mode &mode)
 | 
					  [[nodiscard]] auto fuse_chmod(const char *path, const remote::file_mode &mode)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_chown(const char *path, const remote::user_id &uid,
 | 
					  [[nodiscard]] auto fuse_chown(const char *path, const remote::user_id &uid,
 | 
				
			||||||
                  const remote::group_id &gid) -> packet::error_type override;
 | 
					                                const remote::group_id &gid)
 | 
				
			||||||
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_destroy() -> packet::error_type override;
 | 
					  [[nodiscard]] auto fuse_destroy() -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /*packet::error_type fuse_fallocate(const char *path, const std::int32_t
 | 
					  /*packet::error_type fuse_fallocate(const char *path, const std::int32_t
 | 
				
			||||||
     &mode, const remote::file_offset &offset, const remote::file_offset
 | 
					     &mode, const remote::file_offset &offset, const remote::file_offset
 | 
				
			||||||
     &length, const remote::file_handle &handle) override ;*/
 | 
					     &length, const remote::file_handle &handle) override ;*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_fgetattr(const char *path, remote::stat &r_stat, bool &directory,
 | 
					  [[nodiscard]] auto fuse_fgetattr(const char *path, remote::stat &r_stat,
 | 
				
			||||||
 | 
					                                   bool &directory,
 | 
				
			||||||
                                   const remote::file_handle &handle)
 | 
					                                   const remote::file_handle &handle)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_fsetattr_x(const char *path, const remote::setattr_x &attr,
 | 
					  [[nodiscard]] auto fuse_fsetattr_x(const char *path,
 | 
				
			||||||
 | 
					                                     const remote::setattr_x &attr,
 | 
				
			||||||
                                     const remote::file_handle &handle)
 | 
					                                     const remote::file_handle &handle)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_fsync(const char *path, const std::int32_t &datasync,
 | 
					  [[nodiscard]] auto fuse_fsync(const char *path, const std::int32_t &datasync,
 | 
				
			||||||
                                const remote::file_handle &handle)
 | 
					                                const remote::file_handle &handle)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_ftruncate(const char *path, const remote::file_offset &size,
 | 
					  [[nodiscard]] auto fuse_ftruncate(const char *path,
 | 
				
			||||||
 | 
					                                    const remote::file_offset &size,
 | 
				
			||||||
                                    const remote::file_handle &handle)
 | 
					                                    const remote::file_handle &handle)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_getattr(const char *path, remote::stat &r_stat, bool &directory)
 | 
					  [[nodiscard]] auto fuse_getattr(const char *path, remote::stat &r_stat,
 | 
				
			||||||
 | 
					                                  bool &directory)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /*packet::error_type fuse_getxattr(const char *path, const char *name, char
 | 
					  /*packet::error_type fuse_getxattr(const char *path, const char *name, char
 | 
				
			||||||
@@ -101,77 +106,90 @@ public:
 | 
				
			|||||||
  packet::error_type fuse_getxattrOSX(const char *path, const char *name, char
 | 
					  packet::error_type fuse_getxattrOSX(const char *path, const char *name, char
 | 
				
			||||||
  *value, const remote::file_size &size, std::uint32_t position) override ;*/
 | 
					  *value, const remote::file_size &size, std::uint32_t position) override ;*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_getxtimes(const char *path, remote::file_time &bkuptime,
 | 
					  [[nodiscard]] auto fuse_getxtimes(const char *path,
 | 
				
			||||||
                      remote::file_time &crtime) -> packet::error_type override;
 | 
					                                    remote::file_time &bkuptime,
 | 
				
			||||||
 | 
					                                    remote::file_time &crtime)
 | 
				
			||||||
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_init() -> packet::error_type override;
 | 
					  [[nodiscard]] auto fuse_init() -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /*packet::error_type fuse_listxattr(const char *path, char *buffer,
 | 
					  /*packet::error_type fuse_listxattr(const char *path, char *buffer,
 | 
				
			||||||
                                         const remote::file_size &size) override
 | 
					                                         const remote::file_size &size) override
 | 
				
			||||||
     ;*/
 | 
					     ;*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_mkdir(const char *path, const remote::file_mode &mode)
 | 
					  [[nodiscard]] auto fuse_mkdir(const char *path, const remote::file_mode &mode)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_opendir(const char *path, remote::file_handle &handle)
 | 
					  [[nodiscard]] auto fuse_opendir(const char *path, remote::file_handle &handle)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_create(const char *path, const remote::file_mode &mode,
 | 
					  [[nodiscard]] auto
 | 
				
			||||||
 | 
					  fuse_create(const char *path, const remote::file_mode &mode,
 | 
				
			||||||
              const remote::open_flags &flags, remote::file_handle &handle)
 | 
					              const remote::open_flags &flags, remote::file_handle &handle)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_open(const char *path, const remote::open_flags &flags,
 | 
					  [[nodiscard]] auto fuse_open(const char *path,
 | 
				
			||||||
                 remote::file_handle &handle) -> packet::error_type override;
 | 
					                               const remote::open_flags &flags,
 | 
				
			||||||
 | 
					                               remote::file_handle &handle)
 | 
				
			||||||
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_read(const char *path, char *buffer,
 | 
					  [[nodiscard]] auto fuse_read(const char *path, char *buffer,
 | 
				
			||||||
                               const remote::file_size &read_size,
 | 
					                               const remote::file_size &read_size,
 | 
				
			||||||
                               const remote::file_offset &read_offset,
 | 
					                               const remote::file_offset &read_offset,
 | 
				
			||||||
                               const remote::file_handle &handle)
 | 
					                               const remote::file_handle &handle)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_rename(const char *from, const char *to)
 | 
					  [[nodiscard]] auto fuse_rename(const char *from, const char *to)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_write(const char *path, const char *buffer,
 | 
					  [[nodiscard]] auto fuse_write(const char *path, const char *buffer,
 | 
				
			||||||
                                const remote::file_size &write_size,
 | 
					                                const remote::file_size &write_size,
 | 
				
			||||||
                                const remote::file_offset &write_offset,
 | 
					                                const remote::file_offset &write_offset,
 | 
				
			||||||
                                const remote::file_handle &handle)
 | 
					                                const remote::file_handle &handle)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_write_base64(const char *path, const char *buffer,
 | 
					  [[nodiscard]] auto fuse_write_base64(const char *path, const char *buffer,
 | 
				
			||||||
                                       const remote::file_size &write_size,
 | 
					                                       const remote::file_size &write_size,
 | 
				
			||||||
                                       const remote::file_offset &write_offset,
 | 
					                                       const remote::file_offset &write_offset,
 | 
				
			||||||
                                       const remote::file_handle &handle)
 | 
					                                       const remote::file_handle &handle)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_readdir(const char *path, const remote::file_offset &offset,
 | 
					  [[nodiscard]] auto
 | 
				
			||||||
 | 
					  fuse_readdir(const char *path, const remote::file_offset &offset,
 | 
				
			||||||
               const remote::file_handle &handle, std::string &item_path)
 | 
					               const remote::file_handle &handle, std::string &item_path)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_release(const char *path, const remote::file_handle &handle)
 | 
					  [[nodiscard]] auto fuse_release(const char *path,
 | 
				
			||||||
 | 
					                                  const remote::file_handle &handle)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_releasedir(const char *path, const remote::file_handle &handle)
 | 
					  [[nodiscard]] auto fuse_releasedir(const char *path,
 | 
				
			||||||
 | 
					                                     const remote::file_handle &handle)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /*packet::error_type fuse_removexattr(const char *path, const char *name)
 | 
					  /*packet::error_type fuse_removexattr(const char *path, const char *name)
 | 
				
			||||||
   * override ;*/
 | 
					   * override ;*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_rmdir(const char *path) -> packet::error_type override;
 | 
					  [[nodiscard]] auto fuse_rmdir(const char *path)
 | 
				
			||||||
 | 
					 | 
				
			||||||
  auto fuse_setattr_x(const char *path, remote::setattr_x &attr)
 | 
					 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_setbkuptime(const char *path, const remote::file_time &bkuptime)
 | 
					  [[nodiscard]] auto fuse_setattr_x(const char *path, remote::setattr_x &attr)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_setchgtime(const char *path, const remote::file_time &chgtime)
 | 
					  [[nodiscard]] auto fuse_setbkuptime(const char *path,
 | 
				
			||||||
 | 
					                                      const remote::file_time &bkuptime)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_setcrtime(const char *path, const remote::file_time &crtime)
 | 
					  [[nodiscard]] auto fuse_setchgtime(const char *path,
 | 
				
			||||||
 | 
					                                     const remote::file_time &chgtime)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_setvolname(const char *volname) -> packet::error_type override;
 | 
					  [[nodiscard]] auto fuse_setcrtime(const char *path,
 | 
				
			||||||
 | 
					                                    const remote::file_time &crtime)
 | 
				
			||||||
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] auto fuse_setvolname(const char *volname)
 | 
				
			||||||
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /*packet::error_type fuse_setxattr(const char *path, const char *name, const
 | 
					  /*packet::error_type fuse_setxattr(const char *path, const char *name, const
 | 
				
			||||||
  char *value, const remote::file_size &size, const std::int32_t &flags)
 | 
					  char *value, const remote::file_size &size, const std::int32_t &flags)
 | 
				
			||||||
@@ -181,18 +199,22 @@ public:
 | 
				
			|||||||
  char *value, const remote::file_size &size, const std::int32_t &flags,
 | 
					  char *value, const remote::file_size &size, const std::int32_t &flags,
 | 
				
			||||||
                                           std::uint32_t position) override ;*/
 | 
					                                           std::uint32_t position) override ;*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_statfs(const char *path, std::uint64_t frsize,
 | 
					  [[nodiscard]] auto fuse_statfs(const char *path, std::uint64_t frsize,
 | 
				
			||||||
                   remote::statfs &r_stat) -> packet::error_type override;
 | 
					                                 remote::statfs &r_stat)
 | 
				
			||||||
 | 
					 | 
				
			||||||
  auto fuse_statfs_x(const char *path, std::uint64_t bsize,
 | 
					 | 
				
			||||||
                     remote::statfs_x &r_stat) -> packet::error_type override;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  auto fuse_truncate(const char *path, const remote::file_offset &size)
 | 
					 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_unlink(const char *path) -> packet::error_type override;
 | 
					  [[nodiscard]] auto fuse_statfs_x(const char *path, std::uint64_t bsize,
 | 
				
			||||||
 | 
					                                   remote::statfs_x &r_stat)
 | 
				
			||||||
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto fuse_utimens(const char *path, const remote::file_time *tv,
 | 
					  [[nodiscard]] auto fuse_truncate(const char *path,
 | 
				
			||||||
 | 
					                                   const remote::file_offset &size)
 | 
				
			||||||
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] auto fuse_unlink(const char *path)
 | 
				
			||||||
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] auto fuse_utimens(const char *path, const remote::file_time *tv,
 | 
				
			||||||
                                  std::uint64_t op0, std::uint64_t op1)
 | 
					                                  std::uint64_t op0, std::uint64_t op1)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -200,88 +222,98 @@ public:
 | 
				
			|||||||
                        const remote::group_id & /* gid */) override {}
 | 
					                        const remote::group_id & /* gid */) override {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // JSON Layer
 | 
					  // JSON Layer
 | 
				
			||||||
  auto json_create_directory_snapshot(const std::string &path, json &json_data)
 | 
					  [[nodiscard]] auto json_create_directory_snapshot(const std::string &path,
 | 
				
			||||||
 | 
					                                                    json &json_data)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto json_read_directory_snapshot(const std::string &path,
 | 
					  [[nodiscard]] auto json_read_directory_snapshot(
 | 
				
			||||||
                                    const remote::file_handle &handle,
 | 
					      const std::string &path, const remote::file_handle &handle,
 | 
				
			||||||
                                    std::uint32_t page, json &json_data)
 | 
					      std::uint32_t page, json &json_data) -> packet::error_type override;
 | 
				
			||||||
      -> packet::error_type override;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto json_release_directory_snapshot(const std::string &path,
 | 
					  [[nodiscard]] auto
 | 
				
			||||||
 | 
					  json_release_directory_snapshot(const std::string &path,
 | 
				
			||||||
                                  const remote::file_handle &handle)
 | 
					                                  const remote::file_handle &handle)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // WinFSP Layer
 | 
					  // WinFSP Layer
 | 
				
			||||||
  auto winfsp_can_delete(PVOID file_desc, PWSTR file_name)
 | 
					  [[nodiscard]] auto winfsp_can_delete(PVOID file_desc, PWSTR file_name)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_cleanup(PVOID file_desc, PWSTR file_name, UINT32 flags,
 | 
					  [[nodiscard]] auto winfsp_cleanup(PVOID file_desc, PWSTR file_name,
 | 
				
			||||||
                      BOOLEAN &was_deleted) -> packet::error_type override;
 | 
					                                    UINT32 flags, BOOLEAN &was_deleted)
 | 
				
			||||||
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_close(PVOID file_desc) -> packet::error_type override;
 | 
					  [[nodiscard]] auto winfsp_close(PVOID file_desc)
 | 
				
			||||||
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_create(PWSTR file_name, UINT32 create_options,
 | 
					  [[nodiscard]] auto
 | 
				
			||||||
                     UINT32 granted_access, UINT32 attributes,
 | 
					  winfsp_create(PWSTR file_name, UINT32 create_options, UINT32 granted_access,
 | 
				
			||||||
                     UINT64 allocation_size, PVOID *file_desc,
 | 
					                UINT32 attributes, UINT64 allocation_size, PVOID *file_desc,
 | 
				
			||||||
                remote::file_info *file_info, std::string &normalized_name,
 | 
					                remote::file_info *file_info, std::string &normalized_name,
 | 
				
			||||||
                BOOLEAN &exists) -> packet::error_type override;
 | 
					                BOOLEAN &exists) -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_flush(PVOID file_desc, remote::file_info *file_info)
 | 
					  [[nodiscard]] auto winfsp_flush(PVOID file_desc, remote::file_info *file_info)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_get_dir_buffer(PVOID file_desc, PVOID *&ptr)
 | 
					  [[nodiscard]] auto winfsp_get_dir_buffer(PVOID file_desc, PVOID *&ptr)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_get_file_info(PVOID file_desc, remote::file_info *file_info)
 | 
					  [[nodiscard]] auto winfsp_get_file_info(PVOID file_desc,
 | 
				
			||||||
 | 
					                                          remote::file_info *file_info)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_get_security_by_name(PWSTR file_name, PUINT32 attributes,
 | 
					  [[nodiscard]] auto winfsp_get_security_by_name(
 | 
				
			||||||
                                   std::uint64_t *descriptor_size,
 | 
					      PWSTR file_name, PUINT32 attributes, std::uint64_t *descriptor_size,
 | 
				
			||||||
                                   std::wstring &string_descriptor)
 | 
					      std::wstring &string_descriptor) -> packet::error_type override;
 | 
				
			||||||
      -> packet::error_type override;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_get_volume_info(UINT64 &total_size, UINT64 &free_size,
 | 
					  [[nodiscard]] auto winfsp_get_volume_info(UINT64 &total_size,
 | 
				
			||||||
 | 
					                                            UINT64 &free_size,
 | 
				
			||||||
                                            std::string &volume_label)
 | 
					                                            std::string &volume_label)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_mounted(const std::wstring &location)
 | 
					  [[nodiscard]] auto winfsp_mounted(const std::wstring &location)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_open(PWSTR file_name, UINT32 create_options,
 | 
					  [[nodiscard]] auto winfsp_open(PWSTR file_name, UINT32 create_options,
 | 
				
			||||||
                                 UINT32 granted_access, PVOID *file_desc,
 | 
					                                 UINT32 granted_access, PVOID *file_desc,
 | 
				
			||||||
                   remote::file_info *file_info, std::string &normalized_name)
 | 
					                                 remote::file_info *file_info,
 | 
				
			||||||
 | 
					                                 std::string &normalized_name)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_overwrite(PVOID file_desc, UINT32 attributes,
 | 
					  [[nodiscard]] auto winfsp_overwrite(PVOID file_desc, UINT32 attributes,
 | 
				
			||||||
                        BOOLEAN replace_attributes, UINT64 allocation_size,
 | 
					                                      BOOLEAN replace_attributes,
 | 
				
			||||||
 | 
					                                      UINT64 allocation_size,
 | 
				
			||||||
                                      remote::file_info *file_info)
 | 
					                                      remote::file_info *file_info)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_read(PVOID file_desc, PVOID buffer, UINT64 offset, UINT32 length,
 | 
					  [[nodiscard]] auto winfsp_read(PVOID file_desc, PVOID buffer, UINT64 offset,
 | 
				
			||||||
                   PUINT32 bytes_transferred) -> packet::error_type override;
 | 
					                                 UINT32 length, PUINT32 bytes_transferred)
 | 
				
			||||||
 | 
					 | 
				
			||||||
  auto winfsp_read_directory(PVOID file_desc, PWSTR pattern, PWSTR marker,
 | 
					 | 
				
			||||||
                             json &item_list) -> packet::error_type override;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  auto winfsp_rename(PVOID file_desc, PWSTR file_name, PWSTR new_file_name,
 | 
					 | 
				
			||||||
                     BOOLEAN replace_if_exists) -> packet::error_type override;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  auto winfsp_set_basic_info(PVOID file_desc, UINT32 attributes,
 | 
					 | 
				
			||||||
                             UINT64 creation_time, UINT64 last_access_time,
 | 
					 | 
				
			||||||
                             UINT64 last_write_time, UINT64 change_time,
 | 
					 | 
				
			||||||
                             remote::file_info *file_info)
 | 
					 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_set_file_size(PVOID file_desc, UINT64 new_size,
 | 
					  [[nodiscard]] auto winfsp_read_directory(PVOID file_desc, PWSTR pattern,
 | 
				
			||||||
 | 
					                                           PWSTR marker, json &item_list)
 | 
				
			||||||
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] auto winfsp_rename(PVOID file_desc, PWSTR file_name,
 | 
				
			||||||
 | 
					                                   PWSTR new_file_name,
 | 
				
			||||||
 | 
					                                   BOOLEAN replace_if_exists)
 | 
				
			||||||
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] auto winfsp_set_basic_info(
 | 
				
			||||||
 | 
					      PVOID file_desc, UINT32 attributes, UINT64 creation_time,
 | 
				
			||||||
 | 
					      UINT64 last_access_time, UINT64 last_write_time, UINT64 change_time,
 | 
				
			||||||
 | 
					      remote::file_info *file_info) -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] auto winfsp_set_file_size(PVOID file_desc, UINT64 new_size,
 | 
				
			||||||
                                          BOOLEAN set_allocation_size,
 | 
					                                          BOOLEAN set_allocation_size,
 | 
				
			||||||
                                          remote::file_info *file_info)
 | 
					                                          remote::file_info *file_info)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_unmounted(const std::wstring &location)
 | 
					  [[nodiscard]] auto winfsp_unmounted(const std::wstring &location)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto winfsp_write(PVOID file_desc, PVOID buffer, UINT64 offset, UINT32 length,
 | 
					  [[nodiscard]] auto
 | 
				
			||||||
 | 
					  winfsp_write(PVOID file_desc, PVOID buffer, UINT64 offset, UINT32 length,
 | 
				
			||||||
               BOOLEAN write_to_end, BOOLEAN constrained_io,
 | 
					               BOOLEAN write_to_end, BOOLEAN constrained_io,
 | 
				
			||||||
               PUINT32 bytes_transferred, remote::file_info *file_info)
 | 
					               PUINT32 bytes_transferred, remote::file_info *file_info)
 | 
				
			||||||
      -> packet::error_type override;
 | 
					      -> packet::error_type override;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,9 +35,8 @@ public:
 | 
				
			|||||||
  ~logging_consumer();
 | 
					  ~logging_consumer();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
  static constexpr const std::uint8_t MAX_LOG_FILES{5U};
 | 
					  static constexpr std::uint8_t MAX_LOG_FILES{5U};
 | 
				
			||||||
  static constexpr const std::uint64_t MAX_LOG_FILE_SIZE{1024ULL * 1024ULL *
 | 
					  static constexpr std::uint64_t MAX_LOG_FILE_SIZE{1024ULL * 1024ULL * 5ULL};
 | 
				
			||||||
                                                         5ULL};
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
  static void process_event(const i_event &evt);
 | 
					  static void process_event(const i_event &evt);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,7 +27,7 @@ class i_event;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class event_system final {
 | 
					class event_system final {
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
  static constexpr const std::uint8_t max_queue_retry{
 | 
					  static constexpr std::uint8_t max_queue_retry{
 | 
				
			||||||
      30U,
 | 
					      30U,
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -35,7 +35,7 @@ private:
 | 
				
			|||||||
      std::thread::hardware_concurrency() * 4U,
 | 
					      std::thread::hardware_concurrency() * 4U,
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const std::chrono::seconds queue_wait_secs{
 | 
					  static constexpr std::chrono::seconds queue_wait_secs{
 | 
				
			||||||
      5s,
 | 
					      5s,
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,16 +28,19 @@
 | 
				
			|||||||
namespace repertory {
 | 
					namespace repertory {
 | 
				
			||||||
struct curl_error final : public i_event {
 | 
					struct curl_error final : public i_event {
 | 
				
			||||||
  curl_error() = default;
 | 
					  curl_error() = default;
 | 
				
			||||||
  curl_error(CURLcode code_, std::string_view function_name_, std::string url_)
 | 
					  curl_error(CURLcode code_, std::string_view function_name_, std::string type_,
 | 
				
			||||||
 | 
					             std::string url_)
 | 
				
			||||||
      : code(code_),
 | 
					      : code(code_),
 | 
				
			||||||
        function_name(std::string{function_name_}),
 | 
					        function_name(std::string{function_name_}),
 | 
				
			||||||
 | 
					        type(std::move(type_)),
 | 
				
			||||||
        url(std::move(url_)) {}
 | 
					        url(std::move(url_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::error};
 | 
					  static constexpr event_level level{event_level::error};
 | 
				
			||||||
  static constexpr const std::string_view name{"curl_error"};
 | 
					  static constexpr std::string_view name{"curl_error"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  CURLcode code{};
 | 
					  CURLcode code{};
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
 | 
					  std::string type;
 | 
				
			||||||
  std::string url;
 | 
					  std::string url;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto get_event_level() const -> event_level override {
 | 
					  [[nodiscard]] auto get_event_level() const -> event_level override {
 | 
				
			||||||
@@ -49,8 +52,8 @@ struct curl_error final : public i_event {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  [[nodiscard]] auto get_single_line() const -> std::string override {
 | 
					  [[nodiscard]] auto get_single_line() const -> std::string override {
 | 
				
			||||||
    return fmt::format("{}|func|{}|url|{}|code|{}", name, function_name, url,
 | 
					    return fmt::format("{}|func|{}|type|{}|url|{}|code|{}", name, function_name,
 | 
				
			||||||
                       static_cast<int>(code));
 | 
					                       type, url, static_cast<int>(code));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
} // namespace repertory
 | 
					} // namespace repertory
 | 
				
			||||||
@@ -60,12 +63,14 @@ template <> struct adl_serializer<repertory::curl_error> {
 | 
				
			|||||||
  static void to_json(json &data, const repertory::curl_error &value) {
 | 
					  static void to_json(json &data, const repertory::curl_error &value) {
 | 
				
			||||||
    data["code"] = value.code;
 | 
					    data["code"] = value.code;
 | 
				
			||||||
    data["function_name"] = value.function_name;
 | 
					    data["function_name"] = value.function_name;
 | 
				
			||||||
 | 
					    data["type"] = value.type;
 | 
				
			||||||
    data["url"] = value.url;
 | 
					    data["url"] = value.url;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static void from_json(const json &data, repertory::curl_error &value) {
 | 
					  static void from_json(const json &data, repertory::curl_error &value) {
 | 
				
			||||||
    data.at("code").get_to<CURLcode>(value.code);
 | 
					    data.at("code").get_to<CURLcode>(value.code);
 | 
				
			||||||
    data.at("function_name").get_to<std::string>(value.function_name);
 | 
					    data.at("function_name").get_to<std::string>(value.function_name);
 | 
				
			||||||
 | 
					    data.at("type").get_to<std::string>(value.type);
 | 
				
			||||||
    data.at("url").get_to<std::string>(value.url);
 | 
					    data.at("url").get_to<std::string>(value.url);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,8 +31,8 @@ struct debug_log final : public i_event {
 | 
				
			|||||||
  debug_log(std::string_view function_name_, std::string msg_)
 | 
					  debug_log(std::string_view function_name_, std::string msg_)
 | 
				
			||||||
      : function_name(std::string(function_name_)), msg(std::move(msg_)) {}
 | 
					      : function_name(std::string(function_name_)), msg(std::move(msg_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::debug};
 | 
					  static constexpr event_level level{event_level::debug};
 | 
				
			||||||
  static constexpr const std::string_view name{"debug_log"};
 | 
					  static constexpr std::string_view name{"debug_log"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
  std::string msg;
 | 
					  std::string msg;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,8 +34,8 @@ struct directory_remove_failed final : public i_event {
 | 
				
			|||||||
        error(error_),
 | 
					        error(error_),
 | 
				
			||||||
        function_name(std::string(function_name_)) {}
 | 
					        function_name(std::string(function_name_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::error};
 | 
					  static constexpr event_level level{event_level::error};
 | 
				
			||||||
  static constexpr const std::string_view name{"directory_remove_failed"};
 | 
					  static constexpr std::string_view name{"directory_remove_failed"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  api_error error{};
 | 
					  api_error error{};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,8 +32,8 @@ struct directory_removed final : public i_event {
 | 
				
			|||||||
      : api_path(std::move(api_path_)),
 | 
					      : api_path(std::move(api_path_)),
 | 
				
			||||||
        function_name(std::string(function_name_)) {}
 | 
					        function_name(std::string(function_name_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::debug};
 | 
					  static constexpr event_level level{event_level::debug};
 | 
				
			||||||
  static constexpr const std::string_view name{"directory_removed"};
 | 
					  static constexpr std::string_view name{"directory_removed"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,8 +35,8 @@ struct directory_removed_externally final : public i_event {
 | 
				
			|||||||
        function_name(std::string(function_name_)),
 | 
					        function_name(std::string(function_name_)),
 | 
				
			||||||
        source_path(std::move(source_path_)) {}
 | 
					        source_path(std::move(source_path_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::warn};
 | 
					  static constexpr event_level level{event_level::warn};
 | 
				
			||||||
  static constexpr const std::string_view name{"directory_removed_externally"};
 | 
					  static constexpr std::string_view name{"directory_removed_externally"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,8 +34,8 @@ struct download_begin final : public i_event {
 | 
				
			|||||||
        dest_path(std::move(dest_path_)),
 | 
					        dest_path(std::move(dest_path_)),
 | 
				
			||||||
        function_name(std::string(function_name_)) {}
 | 
					        function_name(std::string(function_name_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::info};
 | 
					  static constexpr event_level level{event_level::info};
 | 
				
			||||||
  static constexpr const std::string_view name{"download_begin"};
 | 
					  static constexpr std::string_view name{"download_begin"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  std::string dest_path;
 | 
					  std::string dest_path;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,8 +35,8 @@ struct download_end final : public i_event {
 | 
				
			|||||||
        error(error_),
 | 
					        error(error_),
 | 
				
			||||||
        function_name(std::string(function_name_)) {}
 | 
					        function_name(std::string(function_name_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::info};
 | 
					  static constexpr event_level level{event_level::info};
 | 
				
			||||||
  static constexpr const std::string_view name{"download_end"};
 | 
					  static constexpr std::string_view name{"download_end"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  std::string dest_path;
 | 
					  std::string dest_path;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,8 +35,8 @@ struct download_progress final : public i_event {
 | 
				
			|||||||
        function_name(std::string(function_name_)),
 | 
					        function_name(std::string(function_name_)),
 | 
				
			||||||
        progress(progress_) {}
 | 
					        progress(progress_) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::info};
 | 
					  static constexpr event_level level{event_level::info};
 | 
				
			||||||
  static constexpr const std::string_view name{"download_progress"};
 | 
					  static constexpr std::string_view name{"download_progress"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  std::string dest_path;
 | 
					  std::string dest_path;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,8 +35,8 @@ struct download_restore_failed final : public i_event {
 | 
				
			|||||||
        error(std::move(error_)),
 | 
					        error(std::move(error_)),
 | 
				
			||||||
        function_name(std::string(function_name_)) {}
 | 
					        function_name(std::string(function_name_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::error};
 | 
					  static constexpr event_level level{event_level::error};
 | 
				
			||||||
  static constexpr const std::string_view name{"download_restore_failed"};
 | 
					  static constexpr std::string_view name{"download_restore_failed"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  std::string dest_path;
 | 
					  std::string dest_path;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,8 +34,8 @@ struct download_restored final : public i_event {
 | 
				
			|||||||
        dest_path(std::move(dest_path_)),
 | 
					        dest_path(std::move(dest_path_)),
 | 
				
			||||||
        function_name(std::string(function_name_)) {}
 | 
					        function_name(std::string(function_name_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::info};
 | 
					  static constexpr event_level level{event_level::info};
 | 
				
			||||||
  static constexpr const std::string_view name{"download_restored"};
 | 
					  static constexpr std::string_view name{"download_restored"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  std::string dest_path;
 | 
					  std::string dest_path;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,8 +36,8 @@ struct download_resume_add_failed final : public i_event {
 | 
				
			|||||||
        error(std::move(error_)),
 | 
					        error(std::move(error_)),
 | 
				
			||||||
        function_name(std::string(function_name_)) {}
 | 
					        function_name(std::string(function_name_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::error};
 | 
					  static constexpr event_level level{event_level::error};
 | 
				
			||||||
  static constexpr const std::string_view name{"download_resume_add_failed"};
 | 
					  static constexpr std::string_view name{"download_resume_add_failed"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  std::string dest_path;
 | 
					  std::string dest_path;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,8 +34,8 @@ struct download_resume_added final : public i_event {
 | 
				
			|||||||
        dest_path(std::move(dest_path_)),
 | 
					        dest_path(std::move(dest_path_)),
 | 
				
			||||||
        function_name(std::string(function_name_)) {}
 | 
					        function_name(std::string(function_name_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::debug};
 | 
					  static constexpr event_level level{event_level::debug};
 | 
				
			||||||
  static constexpr const std::string_view name{"download_resume_added"};
 | 
					  static constexpr std::string_view name{"download_resume_added"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  std::string dest_path;
 | 
					  std::string dest_path;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,8 +34,8 @@ struct download_resume_removed final : public i_event {
 | 
				
			|||||||
        dest_path(std::move(dest_path_)),
 | 
					        dest_path(std::move(dest_path_)),
 | 
				
			||||||
        function_name(std::string(function_name_)) {}
 | 
					        function_name(std::string(function_name_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::debug};
 | 
					  static constexpr event_level level{event_level::debug};
 | 
				
			||||||
  static constexpr const std::string_view name{"download_resume_removed"};
 | 
					  static constexpr std::string_view name{"download_resume_removed"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  std::string dest_path;
 | 
					  std::string dest_path;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,8 +35,8 @@ struct download_type_selected final : public i_event {
 | 
				
			|||||||
        function_name(std::string(function_name_)),
 | 
					        function_name(std::string(function_name_)),
 | 
				
			||||||
        type(type_) {}
 | 
					        type(type_) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::debug};
 | 
					  static constexpr event_level level{event_level::debug};
 | 
				
			||||||
  static constexpr const std::string_view name{"download_type_selected"};
 | 
					  static constexpr std::string_view name{"download_type_selected"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  std::string dest_path;
 | 
					  std::string dest_path;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,8 +35,8 @@ struct drive_mount_failed final : public i_event {
 | 
				
			|||||||
        function_name(std::string(function_name_)),
 | 
					        function_name(std::string(function_name_)),
 | 
				
			||||||
        mount_location(std::move(mount_location_)) {}
 | 
					        mount_location(std::move(mount_location_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::error};
 | 
					  static constexpr event_level level{event_level::error};
 | 
				
			||||||
  static constexpr const std::string_view name{"drive_mount_failed"};
 | 
					  static constexpr std::string_view name{"drive_mount_failed"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  NTSTATUS error{};
 | 
					  NTSTATUS error{};
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,8 +34,8 @@ struct drive_mount_result final : public i_event {
 | 
				
			|||||||
        mount_location(std::move(mount_location_)),
 | 
					        mount_location(std::move(mount_location_)),
 | 
				
			||||||
        result(std::move(result_)) {}
 | 
					        result(std::move(result_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::info};
 | 
					  static constexpr event_level level{event_level::info};
 | 
				
			||||||
  static constexpr const std::string_view name{"drive_mount_result"};
 | 
					  static constexpr std::string_view name{"drive_mount_result"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
  std::string mount_location;
 | 
					  std::string mount_location;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,8 +32,8 @@ struct drive_mounted final : public i_event {
 | 
				
			|||||||
      : function_name(std::string(function_name_)),
 | 
					      : function_name(std::string(function_name_)),
 | 
				
			||||||
        mount_location(std::move(mount_location_)) {}
 | 
					        mount_location(std::move(mount_location_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::info};
 | 
					  static constexpr event_level level{event_level::info};
 | 
				
			||||||
  static constexpr const std::string_view name{"drive_mounted"};
 | 
					  static constexpr std::string_view name{"drive_mounted"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
  std::string mount_location;
 | 
					  std::string mount_location;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,8 +31,8 @@ struct drive_stop_timed_out final : public i_event {
 | 
				
			|||||||
  drive_stop_timed_out(std::string_view function_name_)
 | 
					  drive_stop_timed_out(std::string_view function_name_)
 | 
				
			||||||
      : function_name(std::string(function_name_)) {}
 | 
					      : function_name(std::string(function_name_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::warn};
 | 
					  static constexpr event_level level{event_level::warn};
 | 
				
			||||||
  static constexpr const std::string_view name{"drive_stop_timed_out"};
 | 
					  static constexpr std::string_view name{"drive_stop_timed_out"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,8 +33,8 @@ struct drive_unmount_pending final : public i_event {
 | 
				
			|||||||
      : function_name(std::string(function_name_)),
 | 
					      : function_name(std::string(function_name_)),
 | 
				
			||||||
        mount_location(std::move(mount_location_)) {}
 | 
					        mount_location(std::move(mount_location_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::info};
 | 
					  static constexpr event_level level{event_level::info};
 | 
				
			||||||
  static constexpr const std::string_view name{"drive_unmount_pending"};
 | 
					  static constexpr std::string_view name{"drive_unmount_pending"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
  std::string mount_location;
 | 
					  std::string mount_location;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,8 +32,8 @@ struct drive_unmounted final : public i_event {
 | 
				
			|||||||
      : function_name(std::string(function_name_)),
 | 
					      : function_name(std::string(function_name_)),
 | 
				
			||||||
        mount_location(std::move(mount_location_)) {}
 | 
					        mount_location(std::move(mount_location_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::info};
 | 
					  static constexpr event_level level{event_level::info};
 | 
				
			||||||
  static constexpr const std::string_view name{"drive_unmounted"};
 | 
					  static constexpr std::string_view name{"drive_unmounted"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
  std::string mount_location;
 | 
					  std::string mount_location;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,8 +31,8 @@ struct event_level_changed final : public i_event {
 | 
				
			|||||||
  event_level_changed(std::string_view function_name_, event_level new_level_)
 | 
					  event_level_changed(std::string_view function_name_, event_level new_level_)
 | 
				
			||||||
      : function_name(std::string(function_name_)), new_level(new_level_) {}
 | 
					      : function_name(std::string(function_name_)), new_level(new_level_) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::info};
 | 
					  static constexpr event_level level{event_level::info};
 | 
				
			||||||
  static constexpr const std::string_view name{"event_level_changed"};
 | 
					  static constexpr std::string_view name{"event_level_changed"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
  event_level new_level{};
 | 
					  event_level new_level{};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,8 +32,8 @@ struct file_pinned final : public i_event {
 | 
				
			|||||||
      : api_path(std::move(api_path_)),
 | 
					      : api_path(std::move(api_path_)),
 | 
				
			||||||
        function_name(std::string(function_name_)) {}
 | 
					        function_name(std::string(function_name_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::info};
 | 
					  static constexpr event_level level{event_level::info};
 | 
				
			||||||
  static constexpr const std::string_view name{"file_pinned"};
 | 
					  static constexpr std::string_view name{"file_pinned"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,8 +34,8 @@ struct file_remove_failed final : public i_event {
 | 
				
			|||||||
        error(error_),
 | 
					        error(error_),
 | 
				
			||||||
        function_name(std::string(function_name_)) {}
 | 
					        function_name(std::string(function_name_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::error};
 | 
					  static constexpr event_level level{event_level::error};
 | 
				
			||||||
  static constexpr const std::string_view name{"file_remove_failed"};
 | 
					  static constexpr std::string_view name{"file_remove_failed"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  api_error error{};
 | 
					  api_error error{};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,8 +32,8 @@ struct file_removed final : public i_event {
 | 
				
			|||||||
      : api_path(std::move(api_path_)),
 | 
					      : api_path(std::move(api_path_)),
 | 
				
			||||||
        function_name(std::string(function_name_)) {}
 | 
					        function_name(std::string(function_name_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::debug};
 | 
					  static constexpr event_level level{event_level::debug};
 | 
				
			||||||
  static constexpr const std::string_view name{"file_removed"};
 | 
					  static constexpr std::string_view name{"file_removed"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,8 +35,8 @@ struct file_removed_externally final : public i_event {
 | 
				
			|||||||
        function_name(std::string(function_name_)),
 | 
					        function_name(std::string(function_name_)),
 | 
				
			||||||
        source_path(std::move(source_path_)) {}
 | 
					        source_path(std::move(source_path_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::warn};
 | 
					  static constexpr event_level level{event_level::warn};
 | 
				
			||||||
  static constexpr const std::string_view name{"file_removed_externally"};
 | 
					  static constexpr std::string_view name{"file_removed_externally"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,8 +32,8 @@ struct file_unpinned final : public i_event {
 | 
				
			|||||||
      : api_path(std::move(api_path_)),
 | 
					      : api_path(std::move(api_path_)),
 | 
				
			||||||
        function_name(std::string(function_name_)) {}
 | 
					        function_name(std::string(function_name_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::info};
 | 
					  static constexpr event_level level{event_level::info};
 | 
				
			||||||
  static constexpr const std::string_view name{"file_unpinned"};
 | 
					  static constexpr std::string_view name{"file_unpinned"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,8 +37,8 @@ struct file_upload_completed final : public i_event {
 | 
				
			|||||||
        function_name(std::string(function_name_)),
 | 
					        function_name(std::string(function_name_)),
 | 
				
			||||||
        source_path(std::move(source_path_)) {}
 | 
					        source_path(std::move(source_path_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::info};
 | 
					  static constexpr event_level level{event_level::info};
 | 
				
			||||||
  static constexpr const std::string_view name{"file_upload_completed"};
 | 
					  static constexpr std::string_view name{"file_upload_completed"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  bool cancelled{};
 | 
					  bool cancelled{};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,8 +35,8 @@ struct file_upload_failed final : public i_event {
 | 
				
			|||||||
        function_name(std::string(function_name_)),
 | 
					        function_name(std::string(function_name_)),
 | 
				
			||||||
        source_path(std::move(source_path_)) {}
 | 
					        source_path(std::move(source_path_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::warn};
 | 
					  static constexpr event_level level{event_level::warn};
 | 
				
			||||||
  static constexpr const std::string_view name{"file_upload_failed"};
 | 
					  static constexpr std::string_view name{"file_upload_failed"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  std::string error;
 | 
					  std::string error;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,8 +34,8 @@ struct file_upload_not_found final : public i_event {
 | 
				
			|||||||
        function_name(std::string(function_name_)),
 | 
					        function_name(std::string(function_name_)),
 | 
				
			||||||
        source_path(std::move(source_path_)) {}
 | 
					        source_path(std::move(source_path_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::warn};
 | 
					  static constexpr event_level level{event_level::warn};
 | 
				
			||||||
  static constexpr const std::string_view name{"file_upload_not_found"};
 | 
					  static constexpr std::string_view name{"file_upload_not_found"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,8 +34,8 @@ struct file_upload_queued final : public i_event {
 | 
				
			|||||||
        function_name(std::string(function_name_)),
 | 
					        function_name(std::string(function_name_)),
 | 
				
			||||||
        source_path(std::move(source_path_)) {}
 | 
					        source_path(std::move(source_path_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::info};
 | 
					  static constexpr event_level level{event_level::info};
 | 
				
			||||||
  static constexpr const std::string_view name{"file_upload_queued"};
 | 
					  static constexpr std::string_view name{"file_upload_queued"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,8 +32,8 @@ struct file_upload_removed final : public i_event {
 | 
				
			|||||||
      : api_path(std::move(api_path_)),
 | 
					      : api_path(std::move(api_path_)),
 | 
				
			||||||
        function_name(std::string(function_name_)) {}
 | 
					        function_name(std::string(function_name_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::debug};
 | 
					  static constexpr event_level level{event_level::debug};
 | 
				
			||||||
  static constexpr const std::string_view name{"file_upload_removed"};
 | 
					  static constexpr std::string_view name{"file_upload_removed"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,8 +35,8 @@ struct file_upload_retry final : public i_event {
 | 
				
			|||||||
        function_name(std::string(function_name_)),
 | 
					        function_name(std::string(function_name_)),
 | 
				
			||||||
        source_path(std::move(source_path_)) {}
 | 
					        source_path(std::move(source_path_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::warn};
 | 
					  static constexpr event_level level{event_level::warn};
 | 
				
			||||||
  static constexpr const std::string_view name{"file_upload_retry"};
 | 
					  static constexpr std::string_view name{"file_upload_retry"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  api_error error{};
 | 
					  api_error error{};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,8 +35,8 @@ struct filesystem_item_added final : public i_event {
 | 
				
			|||||||
        directory(directory_),
 | 
					        directory(directory_),
 | 
				
			||||||
        function_name(std::string(function_name_)) {}
 | 
					        function_name(std::string(function_name_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::debug};
 | 
					  static constexpr event_level level{event_level::debug};
 | 
				
			||||||
  static constexpr const std::string_view name{"filesystem_item_added"};
 | 
					  static constexpr std::string_view name{"filesystem_item_added"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_parent;
 | 
					  std::string api_parent;
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,8 +37,8 @@ struct filesystem_item_closed final : public i_event {
 | 
				
			|||||||
        function_name(std::string(function_name_)),
 | 
					        function_name(std::string(function_name_)),
 | 
				
			||||||
        source_path(std::move(source_path_)) {}
 | 
					        source_path(std::move(source_path_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::trace};
 | 
					  static constexpr event_level level{event_level::trace};
 | 
				
			||||||
  static constexpr const std::string_view name{"filesystem_item_closed"};
 | 
					  static constexpr std::string_view name{"filesystem_item_closed"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  bool changed{};
 | 
					  bool changed{};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,8 +35,8 @@ struct filesystem_item_evicted final : public i_event {
 | 
				
			|||||||
        function_name(std::string(function_name_)),
 | 
					        function_name(std::string(function_name_)),
 | 
				
			||||||
        source_path(std::move(source_path_)) {}
 | 
					        source_path(std::move(source_path_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::debug};
 | 
					  static constexpr event_level level{event_level::debug};
 | 
				
			||||||
  static constexpr const std::string_view name{"filesystem_item_evicted"};
 | 
					  static constexpr std::string_view name{"filesystem_item_evicted"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,8 +39,8 @@ struct filesystem_item_handle_closed final : public i_event {
 | 
				
			|||||||
        handle(handle_),
 | 
					        handle(handle_),
 | 
				
			||||||
        source_path(std::move(source_path_)) {}
 | 
					        source_path(std::move(source_path_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::trace};
 | 
					  static constexpr event_level level{event_level::trace};
 | 
				
			||||||
  static constexpr const std::string_view name{"filesystem_item_handle_closed"};
 | 
					  static constexpr std::string_view name{"filesystem_item_handle_closed"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  bool changed{};
 | 
					  bool changed{};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,8 +37,8 @@ struct filesystem_item_handle_opened final : public i_event {
 | 
				
			|||||||
        handle(handle_),
 | 
					        handle(handle_),
 | 
				
			||||||
        source_path(std::move(source_path_)) {}
 | 
					        source_path(std::move(source_path_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::trace};
 | 
					  static constexpr event_level level{event_level::trace};
 | 
				
			||||||
  static constexpr const std::string_view name{"filesystem_item_handle_opened"};
 | 
					  static constexpr std::string_view name{"filesystem_item_handle_opened"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  bool directory{};
 | 
					  bool directory{};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,8 +36,8 @@ struct filesystem_item_opened final : public i_event {
 | 
				
			|||||||
        function_name(std::string(function_name_)),
 | 
					        function_name(std::string(function_name_)),
 | 
				
			||||||
        source_path(std::move(source_path_)) {}
 | 
					        source_path(std::move(source_path_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::trace};
 | 
					  static constexpr event_level level{event_level::trace};
 | 
				
			||||||
  static constexpr const std::string_view name{"filesystem_item_opened"};
 | 
					  static constexpr std::string_view name{"filesystem_item_opened"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  bool directory{};
 | 
					  bool directory{};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,8 +32,8 @@ struct fuse_args_parsed final : public i_event {
 | 
				
			|||||||
  fuse_args_parsed(std::string_view args_, std::string_view function_name_)
 | 
					  fuse_args_parsed(std::string_view args_, std::string_view function_name_)
 | 
				
			||||||
      : args(std::move(args_)), function_name(std::string{function_name_}) {}
 | 
					      : args(std::move(args_)), function_name(std::string{function_name_}) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::info};
 | 
					  static constexpr event_level level{event_level::info};
 | 
				
			||||||
  static constexpr const std::string_view name{"fuse_args_parsed"};
 | 
					  static constexpr std::string_view name{"fuse_args_parsed"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string args;
 | 
					  std::string args;
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,8 +35,8 @@ struct fuse_event final : public i_event {
 | 
				
			|||||||
        error(error_),
 | 
					        error(error_),
 | 
				
			||||||
        function_name(std::string{function_name_}) {}
 | 
					        function_name(std::string{function_name_}) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::debug};
 | 
					  static constexpr event_level level{event_level::debug};
 | 
				
			||||||
  static constexpr const std::string_view name{"fuse_event"};
 | 
					  static constexpr std::string_view name{"fuse_event"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  std::int32_t error{};
 | 
					  std::int32_t error{};
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										68
									
								
								repertory/librepertory/include/events/types/info_log.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								repertory/librepertory/include/events/types/info_log.hpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,68 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					  Copyright <2018-2025> <scott.e.graves@protonmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
				
			||||||
 | 
					  of this software and associated documentation files (the "Software"), to deal
 | 
				
			||||||
 | 
					  in the Software without restriction, including without limitation the rights
 | 
				
			||||||
 | 
					  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
				
			||||||
 | 
					  copies of the Software, and to permit persons to whom the Software is
 | 
				
			||||||
 | 
					  furnished to do so, subject to the following conditions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  The above copyright notice and this permission notice shall be included in all
 | 
				
			||||||
 | 
					  copies or substantial portions of the Software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
				
			||||||
 | 
					  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
				
			||||||
 | 
					  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
				
			||||||
 | 
					  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
				
			||||||
 | 
					  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
				
			||||||
 | 
					  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
				
			||||||
 | 
					  SOFTWARE.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_INFO_LOG_HPP_
 | 
				
			||||||
 | 
					#define REPERTORY_INCLUDE_EVENTS_TYPES_INFO_LOG_HPP_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "events/i_event.hpp"
 | 
				
			||||||
 | 
					#include "types/repertory.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace repertory {
 | 
				
			||||||
 | 
					struct info_log final : public i_event {
 | 
				
			||||||
 | 
					  info_log() = default;
 | 
				
			||||||
 | 
					  info_log(std::string_view function_name_, std::string msg_)
 | 
				
			||||||
 | 
					      : function_name(std::string(function_name_)), msg(std::move(msg_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static constexpr event_level level{event_level::info};
 | 
				
			||||||
 | 
					  static constexpr std::string_view name{"info_log"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  std::string function_name;
 | 
				
			||||||
 | 
					  std::string msg;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] auto get_event_level() const -> event_level override {
 | 
				
			||||||
 | 
					    return level;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] auto get_name() const -> std::string_view override {
 | 
				
			||||||
 | 
					    return name;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] auto get_single_line() const -> std::string override {
 | 
				
			||||||
 | 
					    return fmt::format("{}|func|{}|msg|{}", name, function_name, msg);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					} // namespace repertory
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NLOHMANN_JSON_NAMESPACE_BEGIN
 | 
				
			||||||
 | 
					template <> struct adl_serializer<repertory::info_log> {
 | 
				
			||||||
 | 
					  static void to_json(json &data, const repertory::info_log &value) {
 | 
				
			||||||
 | 
					    data["function_name"] = value.function_name;
 | 
				
			||||||
 | 
					    data["msg"] = value.msg;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static void from_json(const json &data, repertory::info_log &value) {
 | 
				
			||||||
 | 
					    data.at("function_name").get_to<std::string>(value.function_name);
 | 
				
			||||||
 | 
					    data.at("msg").get_to<std::string>(value.msg);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					NLOHMANN_JSON_NAMESPACE_END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // REPERTORY_INCLUDE_EVENTS_TYPES_INFO_LOG_HPP_
 | 
				
			||||||
@@ -34,8 +34,8 @@ struct invalid_cache_size final : public i_event {
 | 
				
			|||||||
        function_name(std::string{function_name_}),
 | 
					        function_name(std::string{function_name_}),
 | 
				
			||||||
        invalid_size(invalid_size_) {}
 | 
					        invalid_size(invalid_size_) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::warn};
 | 
					  static constexpr event_level level{event_level::warn};
 | 
				
			||||||
  static constexpr const std::string_view name{"invalid_cache_size"};
 | 
					  static constexpr std::string_view name{"invalid_cache_size"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::uint64_t cache_size{};
 | 
					  std::uint64_t cache_size{};
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,8 +32,8 @@ struct item_timeout final : public i_event {
 | 
				
			|||||||
      : api_path(std::move(api_path_)),
 | 
					      : api_path(std::move(api_path_)),
 | 
				
			||||||
        function_name(std::string(function_name_)) {}
 | 
					        function_name(std::string(function_name_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::trace};
 | 
					  static constexpr event_level level{event_level::trace};
 | 
				
			||||||
  static constexpr const std::string_view name{"item_timeout"};
 | 
					  static constexpr std::string_view name{"item_timeout"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,8 +35,8 @@ struct max_cache_size_reached final : public i_event {
 | 
				
			|||||||
        function_name(std::string{function_name_}),
 | 
					        function_name(std::string{function_name_}),
 | 
				
			||||||
        max_cache_size(max_cache_size_) {}
 | 
					        max_cache_size(max_cache_size_) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::warn};
 | 
					  static constexpr event_level level{event_level::warn};
 | 
				
			||||||
  static constexpr const std::string_view name{"max_cache_size_reached"};
 | 
					  static constexpr std::string_view name{"max_cache_size_reached"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::uint64_t cache_size{};
 | 
					  std::uint64_t cache_size{};
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,8 +33,8 @@ struct orphaned_file_detected final : public i_event {
 | 
				
			|||||||
      : function_name(std::string(function_name_)),
 | 
					      : function_name(std::string(function_name_)),
 | 
				
			||||||
        source_path(std::move(source_path_)) {}
 | 
					        source_path(std::move(source_path_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::warn};
 | 
					  static constexpr event_level level{event_level::warn};
 | 
				
			||||||
  static constexpr const std::string_view name{"orphaned_file_detected"};
 | 
					  static constexpr std::string_view name{"orphaned_file_detected"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
  std::string source_path;
 | 
					  std::string source_path;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,8 +36,8 @@ struct orphaned_file_processing_failed final : public i_event {
 | 
				
			|||||||
        function_name(std::string(function_name_)),
 | 
					        function_name(std::string(function_name_)),
 | 
				
			||||||
        source_path(std::move(source_path_)) {}
 | 
					        source_path(std::move(source_path_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::error};
 | 
					  static constexpr event_level level{event_level::error};
 | 
				
			||||||
  static constexpr const std::string_view name{
 | 
					  static constexpr std::string_view name{
 | 
				
			||||||
      "orphaned_file_processing_failed",
 | 
					      "orphaned_file_processing_failed",
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,8 +33,8 @@ struct orphaned_source_file_detected final : public i_event {
 | 
				
			|||||||
      : function_name(std::string(function_name_)),
 | 
					      : function_name(std::string(function_name_)),
 | 
				
			||||||
        source_path(std::move(source_path_)) {}
 | 
					        source_path(std::move(source_path_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::warn};
 | 
					  static constexpr event_level level{event_level::warn};
 | 
				
			||||||
  static constexpr const std::string_view name{"orphaned_source_file_detected"};
 | 
					  static constexpr std::string_view name{"orphaned_source_file_detected"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
  std::string source_path;
 | 
					  std::string source_path;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,8 +33,8 @@ struct orphaned_source_file_removed final : public i_event {
 | 
				
			|||||||
      : function_name(std::string(function_name_)),
 | 
					      : function_name(std::string(function_name_)),
 | 
				
			||||||
        source_path(std::move(source_path_)) {}
 | 
					        source_path(std::move(source_path_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::warn};
 | 
					  static constexpr event_level level{event_level::warn};
 | 
				
			||||||
  static constexpr const std::string_view name{"orphaned_source_file_removed"};
 | 
					  static constexpr std::string_view name{"orphaned_source_file_removed"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
  std::string source_path;
 | 
					  std::string source_path;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,8 +34,8 @@ struct packet_client_timeout final : public i_event {
 | 
				
			|||||||
        function_name(std::string(function_name_)),
 | 
					        function_name(std::string(function_name_)),
 | 
				
			||||||
        msg(std::move(msg_)) {}
 | 
					        msg(std::move(msg_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::warn};
 | 
					  static constexpr event_level level{event_level::warn};
 | 
				
			||||||
  static constexpr const std::string_view name{"packet_client_timeout"};
 | 
					  static constexpr std::string_view name{"packet_client_timeout"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string event_name;
 | 
					  std::string event_name;
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,8 +32,8 @@ struct polling_item_begin final : public i_event {
 | 
				
			|||||||
      : function_name(std::string(function_name_)),
 | 
					      : function_name(std::string(function_name_)),
 | 
				
			||||||
        item_name(std::move(item_name_)) {}
 | 
					        item_name(std::move(item_name_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::debug};
 | 
					  static constexpr event_level level{event_level::debug};
 | 
				
			||||||
  static constexpr const std::string_view name{"polling_item_begin"};
 | 
					  static constexpr std::string_view name{"polling_item_begin"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
  std::string item_name;
 | 
					  std::string item_name;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,8 +32,8 @@ struct polling_item_end final : public i_event {
 | 
				
			|||||||
      : function_name(std::string(function_name_)),
 | 
					      : function_name(std::string(function_name_)),
 | 
				
			||||||
        item_name(std::move(item_name_)) {}
 | 
					        item_name(std::move(item_name_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::debug};
 | 
					  static constexpr event_level level{event_level::debug};
 | 
				
			||||||
  static constexpr const std::string_view name{"polling_item_end"};
 | 
					  static constexpr std::string_view name{"polling_item_end"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
  std::string item_name;
 | 
					  std::string item_name;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,8 +35,8 @@ struct provider_invalid_version final : public i_event {
 | 
				
			|||||||
        required_version(std::move(required_version_)),
 | 
					        required_version(std::move(required_version_)),
 | 
				
			||||||
        returned_version(std::move(returned_version_)) {}
 | 
					        returned_version(std::move(returned_version_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::error};
 | 
					  static constexpr event_level level{event_level::error};
 | 
				
			||||||
  static constexpr const std::string_view name{"provider_invalid_version"};
 | 
					  static constexpr std::string_view name{"provider_invalid_version"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
  std::string required_version;
 | 
					  std::string required_version;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,8 +34,8 @@ struct provider_offline final : public i_event {
 | 
				
			|||||||
        host_name_or_ip(std::move(host_name_or_ip_)),
 | 
					        host_name_or_ip(std::move(host_name_or_ip_)),
 | 
				
			||||||
        port(port_) {}
 | 
					        port(port_) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::warn};
 | 
					  static constexpr event_level level{event_level::warn};
 | 
				
			||||||
  static constexpr const std::string_view name{"provider_offline"};
 | 
					  static constexpr std::string_view name{"provider_offline"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
  std::string host_name_or_ip;
 | 
					  std::string host_name_or_ip;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,8 +34,8 @@ struct provider_upload_begin final : public i_event {
 | 
				
			|||||||
        function_name(std::string(function_name_)),
 | 
					        function_name(std::string(function_name_)),
 | 
				
			||||||
        source_path(std::move(source_path_)) {}
 | 
					        source_path(std::move(source_path_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::info};
 | 
					  static constexpr event_level level{event_level::info};
 | 
				
			||||||
  static constexpr const std::string_view name{"provider_upload_begin"};
 | 
					  static constexpr std::string_view name{"provider_upload_begin"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,8 +35,8 @@ struct provider_upload_end final : public i_event {
 | 
				
			|||||||
        function_name(std::string(function_name_)),
 | 
					        function_name(std::string(function_name_)),
 | 
				
			||||||
        source_path(std::move(source_path_)) {}
 | 
					        source_path(std::move(source_path_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::info};
 | 
					  static constexpr event_level level{event_level::info};
 | 
				
			||||||
  static constexpr const std::string_view name{"provider_upload_end"};
 | 
					  static constexpr std::string_view name{"provider_upload_end"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  api_error error{};
 | 
					  api_error error{};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,8 +35,8 @@ struct remote_server_event final : public i_event {
 | 
				
			|||||||
        error(error_),
 | 
					        error(error_),
 | 
				
			||||||
        function_name(std::string{function_name_}) {}
 | 
					        function_name(std::string{function_name_}) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::debug};
 | 
					  static constexpr event_level level{event_level::debug};
 | 
				
			||||||
  static constexpr const std::string_view name{"remote_server_event"};
 | 
					  static constexpr std::string_view name{"remote_server_event"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string api_path;
 | 
					  std::string api_path;
 | 
				
			||||||
  packet::error_type error{};
 | 
					  packet::error_type error{};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,8 +31,8 @@ struct repertory_exception final : public i_event {
 | 
				
			|||||||
  repertory_exception(std::string_view function_name_, std::string msg_)
 | 
					  repertory_exception(std::string_view function_name_, std::string msg_)
 | 
				
			||||||
      : function_name(std::string(function_name_)), msg(std::move(msg_)) {}
 | 
					      : function_name(std::string(function_name_)), msg(std::move(msg_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::error};
 | 
					  static constexpr event_level level{event_level::error};
 | 
				
			||||||
  static constexpr const std::string_view name{"repertory_exception"};
 | 
					  static constexpr std::string_view name{"repertory_exception"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
  std::string msg;
 | 
					  std::string msg;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,8 +33,8 @@ struct service_start_begin final : public i_event {
 | 
				
			|||||||
      : function_name(std::string(function_name_)),
 | 
					      : function_name(std::string(function_name_)),
 | 
				
			||||||
        service_name(std::move(service_name_)) {}
 | 
					        service_name(std::move(service_name_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::debug};
 | 
					  static constexpr event_level level{event_level::debug};
 | 
				
			||||||
  static constexpr const std::string_view name{"service_start_begin"};
 | 
					  static constexpr std::string_view name{"service_start_begin"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
  std::string service_name;
 | 
					  std::string service_name;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,8 +32,8 @@ struct service_start_end final : public i_event {
 | 
				
			|||||||
      : function_name(std::string(function_name_)),
 | 
					      : function_name(std::string(function_name_)),
 | 
				
			||||||
        service_name(std::move(service_name_)) {}
 | 
					        service_name(std::move(service_name_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::debug};
 | 
					  static constexpr event_level level{event_level::debug};
 | 
				
			||||||
  static constexpr const std::string_view name{"service_start_end"};
 | 
					  static constexpr std::string_view name{"service_start_end"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
  std::string service_name;
 | 
					  std::string service_name;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,8 +32,8 @@ struct service_stop_begin final : public i_event {
 | 
				
			|||||||
      : function_name(std::string(function_name_)),
 | 
					      : function_name(std::string(function_name_)),
 | 
				
			||||||
        service_name(std::move(service_name_)) {}
 | 
					        service_name(std::move(service_name_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::debug};
 | 
					  static constexpr event_level level{event_level::debug};
 | 
				
			||||||
  static constexpr const std::string_view name{"service_stop_begin"};
 | 
					  static constexpr std::string_view name{"service_stop_begin"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
  std::string service_name;
 | 
					  std::string service_name;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,8 +32,8 @@ struct service_stop_end final : public i_event {
 | 
				
			|||||||
      : function_name(std::string(function_name_)),
 | 
					      : function_name(std::string(function_name_)),
 | 
				
			||||||
        service_name(std::move(service_name_)) {}
 | 
					        service_name(std::move(service_name_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::debug};
 | 
					  static constexpr event_level level{event_level::debug};
 | 
				
			||||||
  static constexpr const std::string_view name{"service_stop_end"};
 | 
					  static constexpr std::string_view name{"service_stop_end"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
  std::string service_name;
 | 
					  std::string service_name;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										68
									
								
								repertory/librepertory/include/events/types/trace_log.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								repertory/librepertory/include/events/types/trace_log.hpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,68 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					  Copyright <2018-2025> <scott.e.graves@protonmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
				
			||||||
 | 
					  of this software and associated documentation files (the "Software"), to deal
 | 
				
			||||||
 | 
					  in the Software without restriction, including without limitation the rights
 | 
				
			||||||
 | 
					  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
				
			||||||
 | 
					  copies of the Software, and to permit persons to whom the Software is
 | 
				
			||||||
 | 
					  furnished to do so, subject to the following conditions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  The above copyright notice and this permission notice shall be included in all
 | 
				
			||||||
 | 
					  copies or substantial portions of the Software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
				
			||||||
 | 
					  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
				
			||||||
 | 
					  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
				
			||||||
 | 
					  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
				
			||||||
 | 
					  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
				
			||||||
 | 
					  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
				
			||||||
 | 
					  SOFTWARE.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_TRACE_LOG_HPP_
 | 
				
			||||||
 | 
					#define REPERTORY_INCLUDE_EVENTS_TYPES_TRACE_LOG_HPP_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "events/i_event.hpp"
 | 
				
			||||||
 | 
					#include "types/repertory.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace repertory {
 | 
				
			||||||
 | 
					struct trace_log final : public i_event {
 | 
				
			||||||
 | 
					  trace_log() = default;
 | 
				
			||||||
 | 
					  trace_log(std::string_view function_name_, std::string msg_)
 | 
				
			||||||
 | 
					      : function_name(std::string(function_name_)), msg(std::move(msg_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static constexpr event_level level{event_level::trace};
 | 
				
			||||||
 | 
					  static constexpr std::string_view name{"trace_log"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  std::string function_name;
 | 
				
			||||||
 | 
					  std::string msg;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] auto get_event_level() const -> event_level override {
 | 
				
			||||||
 | 
					    return level;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] auto get_name() const -> std::string_view override {
 | 
				
			||||||
 | 
					    return name;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] auto get_single_line() const -> std::string override {
 | 
				
			||||||
 | 
					    return fmt::format("{}|func|{}|msg|{}", name, function_name, msg);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					} // namespace repertory
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NLOHMANN_JSON_NAMESPACE_BEGIN
 | 
				
			||||||
 | 
					template <> struct adl_serializer<repertory::trace_log> {
 | 
				
			||||||
 | 
					  static void to_json(json &data, const repertory::trace_log &value) {
 | 
				
			||||||
 | 
					    data["function_name"] = value.function_name;
 | 
				
			||||||
 | 
					    data["msg"] = value.msg;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static void from_json(const json &data, repertory::trace_log &value) {
 | 
				
			||||||
 | 
					    data.at("function_name").get_to<std::string>(value.function_name);
 | 
				
			||||||
 | 
					    data.at("msg").get_to<std::string>(value.msg);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					NLOHMANN_JSON_NAMESPACE_END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // REPERTORY_INCLUDE_EVENTS_TYPES_TRACE_LOG_HPP_
 | 
				
			||||||
@@ -31,8 +31,8 @@ struct unmount_requested final : public i_event {
 | 
				
			|||||||
  unmount_requested(std::string_view function_name_)
 | 
					  unmount_requested(std::string_view function_name_)
 | 
				
			||||||
      : function_name(std::string(function_name_)) {}
 | 
					      : function_name(std::string(function_name_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::info};
 | 
					  static constexpr event_level level{event_level::info};
 | 
				
			||||||
  static constexpr const std::string_view name{"unmount_requested"};
 | 
					  static constexpr std::string_view name{"unmount_requested"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,8 +35,8 @@ struct unmount_result final : public i_event {
 | 
				
			|||||||
        mount_location(std::move(mount_location_)),
 | 
					        mount_location(std::move(mount_location_)),
 | 
				
			||||||
        result(result_) {}
 | 
					        result(result_) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static constexpr const event_level level{event_level::info};
 | 
					  static constexpr event_level level{event_level::info};
 | 
				
			||||||
  static constexpr const std::string_view name{"unmount_result"};
 | 
					  static constexpr std::string_view name{"unmount_result"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string function_name;
 | 
					  std::string function_name;
 | 
				
			||||||
  std::string mount_location;
 | 
					  std::string mount_location;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										68
									
								
								repertory/librepertory/include/events/types/warn_log.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								repertory/librepertory/include/events/types/warn_log.hpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,68 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					  Copyright <2018-2025> <scott.e.graves@protonmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
				
			||||||
 | 
					  of this software and associated documentation files (the "Software"), to deal
 | 
				
			||||||
 | 
					  in the Software without restriction, including without limitation the rights
 | 
				
			||||||
 | 
					  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
				
			||||||
 | 
					  copies of the Software, and to permit persons to whom the Software is
 | 
				
			||||||
 | 
					  furnished to do so, subject to the following conditions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  The above copyright notice and this permission notice shall be included in all
 | 
				
			||||||
 | 
					  copies or substantial portions of the Software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
				
			||||||
 | 
					  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
				
			||||||
 | 
					  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
				
			||||||
 | 
					  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
				
			||||||
 | 
					  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
				
			||||||
 | 
					  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
				
			||||||
 | 
					  SOFTWARE.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					#ifndef REPERTORY_INCLUDE_EVENTS_TYPES_WARN_LOG_HPP_
 | 
				
			||||||
 | 
					#define REPERTORY_INCLUDE_EVENTS_TYPES_WARN_LOG_HPP_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "events/i_event.hpp"
 | 
				
			||||||
 | 
					#include "types/repertory.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace repertory {
 | 
				
			||||||
 | 
					struct warn_log final : public i_event {
 | 
				
			||||||
 | 
					  warn_log() = default;
 | 
				
			||||||
 | 
					  warn_log(std::string_view function_name_, std::string msg_)
 | 
				
			||||||
 | 
					      : function_name(std::string(function_name_)), msg(std::move(msg_)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static constexpr event_level level{event_level::warn};
 | 
				
			||||||
 | 
					  static constexpr std::string_view name{"warn_log"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  std::string function_name;
 | 
				
			||||||
 | 
					  std::string msg;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] auto get_event_level() const -> event_level override {
 | 
				
			||||||
 | 
					    return level;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] auto get_name() const -> std::string_view override {
 | 
				
			||||||
 | 
					    return name;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[nodiscard]] auto get_single_line() const -> std::string override {
 | 
				
			||||||
 | 
					    return fmt::format("{}|func|{}|msg|{}", name, function_name, msg);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					} // namespace repertory
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NLOHMANN_JSON_NAMESPACE_BEGIN
 | 
				
			||||||
 | 
					template <> struct adl_serializer<repertory::warn_log> {
 | 
				
			||||||
 | 
					  static void to_json(json &data, const repertory::warn_log &value) {
 | 
				
			||||||
 | 
					    data["function_name"] = value.function_name;
 | 
				
			||||||
 | 
					    data["msg"] = value.msg;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static void from_json(const json &data, repertory::warn_log &value) {
 | 
				
			||||||
 | 
					    data.at("function_name").get_to<std::string>(value.function_name);
 | 
				
			||||||
 | 
					    data.at("msg").get_to<std::string>(value.msg);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					NLOHMANN_JSON_NAMESPACE_END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // REPERTORY_INCLUDE_EVENTS_TYPES_WARN_LOG_HPP_
 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user