#pragma once #include "gp_config.hpp" #include "gp/buffer.hpp" #include "gp/variant.hpp" namespace gp { namespace fs { struct bad_file final { static constexpr auto _what = "bad_file"; constexpr auto what() { return _what; } }; struct faulty_buffer final { static constexpr auto _what = "faulty_buffer"; constexpr auto what() { return _what; } }; struct interrupted final { static constexpr auto _what = "interrupted"; constexpr auto what() { return _what; } }; struct io_error final { static constexpr auto _what = "io_error"; constexpr auto what() { return _what; } }; struct is_directory final { static constexpr auto _what = "is_directory"; constexpr auto what() { return _what; } }; struct try_again final { static constexpr auto _what = "try_again"; constexpr auto what() { return _what; } }; struct not_connected final { static constexpr auto _what = "not_connected"; constexpr auto what() { return _what; } }; struct impossible_io final { static constexpr auto _what = "impossible_io"; constexpr auto what() { return _what; } }; struct negative_offset final { static constexpr auto _what = "negative_offset"; constexpr auto what() { return _what; } }; struct is_pipe final { static constexpr auto _what = "is_pipe"; constexpr auto what() { return _what; } }; struct buffer_too_big final { static constexpr auto _what = "buffer_too_big"; constexpr auto what() { return _what; } }; struct path_not_directory final { static constexpr auto _what = "path_not_directory"; constexpr auto what() { return _what; } }; struct name_too_long final { static constexpr auto _what = "name_too_long"; constexpr auto what() { return _what; } }; struct does_not_exist final { static constexpr auto _what = "does_not_exist"; constexpr auto what() { return _what; } }; struct may_loop final { static constexpr auto _what = "may_loop"; constexpr auto what() { return _what; } }; struct invalid_flags final { static constexpr auto _what = "invalid_flags"; constexpr auto what() { return _what; } }; struct is_read_only final { static constexpr auto _what = "is_read_only"; constexpr auto what() { return _what; } }; struct fd_limit_reached final { static constexpr auto _what = "fd_limit_reached"; constexpr auto what() { return _what; } }; struct file_limit_reached final { static constexpr auto _what = "file_limit_reached"; constexpr auto what() { return _what; } }; struct no_locking final { static constexpr auto _what = "no_locking"; constexpr auto what() { return _what; } }; struct would_block final { static constexpr auto _what = "would_block"; constexpr auto what() { return _what; } }; struct no_inodes final { static constexpr auto _what = "no_inodes"; constexpr auto what() { return _what; } }; struct no_space final { static constexpr auto _what = "no_space"; constexpr auto what() { return _what; } }; struct quota_reached final { static constexpr auto _what = "quota_reached"; constexpr auto what() { return _what; } }; struct cannot_write_shared_text final { static constexpr auto _what = "cannot_write_shared_text"; constexpr auto what() { return _what; } }; struct faulty_filename final { static constexpr auto _what = "faulty_filename"; constexpr auto what() { return _what; } }; struct exists_already final { static constexpr auto _what = "exists_already"; constexpr auto what() { return _what; } }; struct is_append_only final { static constexpr auto _what = "is_append_only"; constexpr auto what() { return _what; } }; struct unimplemented_operation final { static constexpr auto _what = "unimplemented_operation"; constexpr auto what() { return _what; } }; struct is_busy final { static constexpr auto _what = "is_busy"; constexpr auto what() { return _what; } }; struct bad_relative_path final { static constexpr auto _what = "bad_relative_path"; constexpr auto what() { return _what; } }; struct no_permissions final { static constexpr auto _what = "no_permissions"; constexpr auto what() { return _what; } }; struct success final { static constexpr auto _what = "success"; constexpr auto what() { return _what; } }; struct too_big final { static constexpr auto _what = "too_big"; constexpr auto what() { return _what; } }; struct network_down final { static constexpr auto _what = "network_down"; constexpr auto what() { return _what; } }; struct destination_not_available final { static constexpr auto _what = "destination_not_available"; constexpr auto what() { return _what; } }; struct insufficient_buffer_space final { static constexpr auto _what = "insufficient_buffer_space"; constexpr auto what() { return _what; } }; using read_return = gp::fixed_variant< typename buffer::associated_iterator, // iterator to last element read bad_file, faulty_buffer, interrupted, io_error, is_directory, try_again, not_connected, impossible_io, negative_offset, is_pipe, buffer_too_big >; using open_return = gp::fixed_variant< gp_config::file_descriptor_t, path_not_directory, name_too_long, does_not_exist, may_loop, is_directory, invalid_flags, is_read_only, fd_limit_reached, file_limit_reached, impossible_io, interrupted, no_locking, would_block, no_space, no_inodes, quota_reached, io_error, cannot_write_shared_text, faulty_filename, exists_already, is_append_only, unimplemented_operation, is_busy, bad_relative_path, no_permissions >; using close_return = gp::fixed_variant< success, bad_file, interrupted, io_error >; using write_return = gp::fixed_variant< typename buffer::associated_iterator, bad_file, no_space, quota_reached, too_big, interrupted, io_error, faulty_buffer, is_pipe, try_again, network_down, destination_not_available, impossible_io, buffer_too_big, negative_offset, insufficient_buffer_space >; class file_flags{}; class file_permissions{}; } }