1module Groonga
2  class Context
3    class RC
4      @@codes = {}
5      @@names = {}
6
7      class << self
8        def find(name_or_code)
9          if name_or_code.is_a?(Symbol)
10            @@names[name_or_code] || UNKNOWN_ERROR
11          else
12            @@codes[name_or_code] || UNKNOWN_ERROR
13          end
14        end
15
16        def register(name, code, error_class)
17          rc = new(name, code, error_class)
18          @@codes[code] = rc
19          @@names[name] = rc
20          error_class.rc = rc if error_class
21          rc
22        end
23      end
24
25      attr_reader :name
26      attr_reader :error_class
27      def initialize(name, code, error_class)
28        @name = name
29        @code = code
30        @error_class = error_class
31      end
32
33      def to_i
34        @code
35      end
36
37      SUCCESS =
38        register(:success, 0, nil)
39      END_OF_DATA =
40        register(:end_of_data, 1, EndOfData)
41      UNKNOWN_ERROR =
42        register(:unknown_error, -1, UnknownError)
43      OPERATION_NOT_PERMITTED =
44        register(:operation_not_permitted, -2, OperationNotPermitted)
45      NO_SUCH_FILE_OR_DIRECTORY =
46        register(:no_such_file_or_directory, -3, NoSuchFileOrDirectory)
47      NO_SUCH_PROCESS =
48        register(:no_such_process, -4, NoSuchProcess)
49      INTERRUPTED_FUNCTION_CALL =
50        register(:interrupted_function_call, -5, InterruptedFunctionCall)
51      INPUT_OUTPUT_ERROR =
52        register(:input_output_error, -6, InputOutputError)
53      NO_SUCH_DEVICE_OR_ADDRESS =
54        register(:no_such_device_or_address, -7, NoSuchDeviceOrAddress)
55      ARG_LIST_TOO_LONG =
56        register(:arg_list_too_long, -8, ArgListTooLong)
57      EXEC_FORMAT_ERROR =
58        register(:exec_format_error, -9, ExecFormatError)
59      BAD_FILE_DESCRIPTOR =
60        register(:bad_file_descriptor, -10, BadFileDescriptor)
61      NO_CHILD_PROCESSES =
62        register(:no_child_processes, -11, NoChildProcesses)
63      RESOURCE_TEMPORARILY_UNAVAILABLE =
64        register(:resource_temporarily_unavailable, -12,
65                 ResourceTemporarilyUnavailable)
66      NOT_ENOUGH_SPACE =
67        register(:not_enough_space, -13, NotEnoughSpace)
68      PERMISSION_DENIED =
69        register(:permission_denied, -14, PermissionDenied)
70      BAD_ADDRESS =
71        register(:bad_address, -15, BadAddress)
72      RESOURCE_BUSY =
73        register(:resource_busy, -16, ResourceBusy)
74      FILE_EXISTS =
75        register(:file_exists, -17, FileExists)
76      IMPROPER_LINK =
77        register(:improper_link, -18, ImproperLink)
78      NO_SUCH_DEVICE =
79        register(:no_such_device, -19, NoSuchDevice)
80      NOT_DIRECTORY =
81        register(:not_directory, -20, NotDirectory)
82      IS_DIRECTORY =
83        register(:is_directory, -21, IsDirectory)
84      INVALID_ARGUMENT =
85        register(:invalid_argument, -22, InvalidArgument)
86      TOO_MANY_OPEN_FILES_IN_SYSTEM =
87        register(:too_many_open_files_in_system, -23, TooManyOpenFilesInSystem)
88      TOO_MANY_OPEN_FILES =
89        register(:too_many_open_files, -24, TooManyOpenFiles)
90      INAPPROPRIATE_IO_CONTROL_OPERATION =
91        register(:inappropriate_io_control_operation, -25,
92                 InappropriateIOControlOperation)
93      FILE_TOO_LARGE =
94        register(:file_too_large, -26, FileTooLarge)
95      NO_SPACE_LEFT_ON_DEVICE =
96        register(:no_space_left_on_device, -27, NoSpaceLeftOnDevice)
97      INVALID_SEEK =
98        register(:invalid_seek, -28, InvalidSeek)
99      READ_ONLY_FILE_SYSTEM =
100        register(:read_only_file_system, -29, ReadOnlyFileSystem)
101      TOO_MANY_LINKS =
102        register(:too_many_links, -30, TooManyLinks)
103      BROKEN_PIPE =
104        register(:broken_pipe, -31, BrokenPipe)
105      DOMAIN_ERROR =
106        register(:domain_error, -32, DomainError)
107      RESULT_TOO_LARGE =
108        register(:result_too_large, -33, ResultTooLarge)
109      RESOURCE_DEADLOCK_AVOIDED =
110        register(:resource_deadlock_avoided, -34, ResourceDeadlockAvoided)
111      NO_MEMORY_AVAILABLE =
112        register(:no_memory_available, -35, NoMemoryAvailable)
113      FILENAME_TOO_LONG =
114        register(:filename_too_long, -36, FilenameTooLong)
115      NO_LOCKS_AVAILABLE =
116        register(:no_locks_available, -37, NoLocksAvailable)
117      FUNCTION_NOT_IMPLEMENTED =
118        register(:function_not_implemented, -38, FunctionNotImplemented)
119      DIRECTORY_NOT_EMPTY =
120        register(:directory_not_empty, -39, DirectoryNotEmpty)
121      ILLEGAL_BYTE_SEQUENCE =
122        register(:illegal_byte_sequence, -40, IllegalByteSequence)
123      SOCKET_NOT_INITIALIZED =
124        register(:socket_not_initialized, -41, SocketNotInitialized)
125      OPERATION_WOULD_BLOCK =
126        register(:operation_would_block, -42, OperationWouldBlock)
127      ADDRESS_IS_NOT_AVAILABLE =
128        register(:address_is_not_available, -43, AddressIsNotAvailable)
129      NETWORK_IS_DOWN =
130        register(:network_is_down, -44, NetworkIsDown)
131      NO_BUFFER =
132        register(:no_buffer, -45, NoBuffer)
133      SOCKET_IS_ALREADY_CONNECTED =
134        register(:socket_is_already_connected, -46, SocketIsAlreadyConnected)
135      SOCKET_IS_NOT_CONNECTED =
136        register(:socket_is_not_connected, -47, SocketIsNotConnected)
137      SOCKET_IS_ALREADY_SHUTDOWNED =
138        register(:socket_is_already_shutdowned, -48, SocketIsAlreadyShutdowned)
139      OPERATION_TIMEOUT =
140        register(:operation_timeout, -49, OperationTimeout)
141      CONNECTION_REFUSED =
142        register(:connection_refused, -50, ConnectionRefused)
143      RANGE_ERROR =
144        register(:range_error, -51, RangeError)
145      TOKENIZER_ERROR =
146        register(:tokenizer_error, -52, TokenizerError)
147      FILE_CORRUPT =
148        register(:file_corrupt, -53, FileCorrupt)
149      INVALID_FORMAT =
150        register(:invalid_format, -54, InvalidFormat)
151      OBJECT_CORRUPT =
152        register(:object_corrupt, -55, ObjectCorrupt)
153      TOO_MANY_SYMBOLIC_LINKS =
154        register(:too_many_symbolic_links, -56, TooManySymbolicLinks)
155      NOT_SOCKET =
156        register(:not_socket, -57, NotSocket)
157      OPERATION_NOT_SUPPORTED =
158        register(:operation_not_supported, -58, OperationNotSupported)
159      ADDRESS_IS_IN_USE =
160        register(:address_is_in_use, -59, AddressIsInUse)
161      ZLIB_ERROR =
162        register(:zlib_error, -60, ZlibError)
163      LZ4_ERROR =
164        register(:lz4_error, -61, LZ4Error)
165      STACK_OVER_FLOW =
166        register(:stack_over_flow, -62, StackOverFlow)
167      SYNTAX_ERROR =
168        register(:syntax_error, -63, SyntaxError)
169      RETRY_MAX =
170        register(:retry_max, -64, RetryMax)
171      INCOMPATIBLE_FILE_FORMAT =
172        register(:incompatible_file_format, -65, IncompatibleFileFormat)
173      UPDATE_NOT_ALLOWED =
174        register(:update_not_allowed, -66, UpdateNotAllowed)
175      TOO_SMALL_OFFSET =
176        register(:too_small_offset, -67, TooSmallOffset)
177      TOO_LARGE_OFFSET =
178        register(:too_large_offset, -68, TooLargeOffset)
179      TOO_SMALL_LIMIT =
180        register(:too_small_limit, -69, TooSmallLimit)
181      CAS_ERROR =
182        register(:cas_error, -70, CASError)
183      UNSUPPORTED_COMMAND_VERSION =
184        register(:unsupported_command_version, -71, UnsupportedCommandVersion)
185      NORMALIZER_ERROR =
186        register(:normalizer_error, -72, NormalizerError)
187      TOKEN_FILTER_ERROR =
188        register(:token_filter_error, -73, TokenFilterError)
189      COMMAND_ERROR =
190        register(:command_error, -74, CommandError)
191      PLUGIN_ERROR =
192        register(:plugin_error, -75, PluginError)
193      SCORER_ERROR =
194        register(:scorer_error, -76, ScorerError)
195      CANCEL =
196        register(:cancel, -77, Cancel)
197      WINDOW_FUNCTION_ERROR =
198        register(:window_function_error, -78, WindowFunctionError)
199      ZSTD_ERROR =
200        register(:zstd_error, -79, ZstdError)
201
202      GroongaError.rc = UNKNOWN_ERROR
203    end
204  end
205end
206