freetype/
error.rs

1use core::fmt;
2use ffi;
3
4pub type FtResult<T> = Result<T, Error>;
5
6#[derive(Copy, Clone, PartialEq, Eq, Debug)]
7#[repr(i32)]
8pub enum Error {
9    Ok                          = ffi::FT_Err_Ok,
10    CannotOpenResource          = ffi::FT_Err_Cannot_Open_Resource,
11    UnknownFileFormat           = ffi::FT_Err_Unknown_File_Format,
12    InvalidFileFormat           = ffi::FT_Err_Invalid_File_Format,
13    InvalidVersion              = ffi::FT_Err_Invalid_Version,
14    LowerModuleVersion          = ffi::FT_Err_Lower_Module_Version,
15    InvalidArgument             = ffi::FT_Err_Invalid_Argument,
16    UnimplementedFeature        = ffi::FT_Err_Unimplemented_Feature,
17    InvalidTable                = ffi::FT_Err_Invalid_Table,
18    InvalidOffset               = ffi::FT_Err_Invalid_Offset,
19    ArrayTooLarge               = ffi::FT_Err_Array_Too_Large,
20    MissingModule               = ffi::FT_Err_Missing_Module,
21    MissingProperty             = ffi::FT_Err_Missing_Property,
22    InvalidGlyphIndex           = ffi::FT_Err_Invalid_Glyph_Index,
23    InvalidCharacterCode        = ffi::FT_Err_Invalid_Character_Code,
24    InvalidGlyphFormat          = ffi::FT_Err_Invalid_Glyph_Format,
25    CannotRenderGlyph           = ffi::FT_Err_Cannot_Render_Glyph,
26    InvalidOutline              = ffi::FT_Err_Invalid_Outline,
27    InvalidComposite            = ffi::FT_Err_Invalid_Composite,
28    TooManyHints                = ffi::FT_Err_Too_Many_Hints,
29    InvalidPixelSize            = ffi::FT_Err_Invalid_Pixel_Size,
30    InvalidHandle               = ffi::FT_Err_Invalid_Handle,
31    InvalidLibraryHandle        = ffi::FT_Err_Invalid_Library_Handle,
32    InvalidDriverHandle         = ffi::FT_Err_Invalid_Driver_Handle,
33    InvalidFaceHandle           = ffi::FT_Err_Invalid_Face_Handle,
34    InvalidSizeHandle           = ffi::FT_Err_Invalid_Size_Handle,
35    InvalidSlotHandle           = ffi::FT_Err_Invalid_Slot_Handle,
36    InvalidCharMapHandle        = ffi::FT_Err_Invalid_CharMap_Handle,
37    InvalidCacheHandle          = ffi::FT_Err_Invalid_Cache_Handle,
38    InvalidStreamHandle         = ffi::FT_Err_Invalid_Stream_Handle,
39    TooManyDrivers              = ffi::FT_Err_Too_Many_Drivers,
40    TooManyExtensions           = ffi::FT_Err_Too_Many_Extensions,
41    OutOfMemory                 = ffi::FT_Err_Out_Of_Memory,
42    UnlistedObject              = ffi::FT_Err_Unlisted_Object,
43    CannotOpenStream            = ffi::FT_Err_Cannot_Open_Stream,
44    InvalidStreamSeek           = ffi::FT_Err_Invalid_Stream_Seek,
45    InvalidStreamSkip           = ffi::FT_Err_Invalid_Stream_Skip,
46    InvalidStreamRead           = ffi::FT_Err_Invalid_Stream_Read,
47    InvalidStreamOperation      = ffi::FT_Err_Invalid_Stream_Operation,
48    InvalidFrameOperation       = ffi::FT_Err_Invalid_Frame_Operation,
49    NestedFrameAccess           = ffi::FT_Err_Nested_Frame_Access,
50    InvalidFrameRead            = ffi::FT_Err_Invalid_Frame_Read,
51    RasterUninitialized         = ffi::FT_Err_Raster_Uninitialized,
52    RasterCorrupted             = ffi::FT_Err_Raster_Corrupted,
53    RasterOverflow              = ffi::FT_Err_Raster_Overflow,
54    RasterNegativeHeight        = ffi::FT_Err_Raster_Negative_Height,
55    TooManyCaches               = ffi::FT_Err_Too_Many_Caches,
56    InvalidOpcode               = ffi::FT_Err_Invalid_Opcode,
57    TooFewArguments             = ffi::FT_Err_Too_Few_Arguments,
58    StackOverflow               = ffi::FT_Err_Stack_Overflow,
59    CodeOverflow                = ffi::FT_Err_Code_Overflow,
60    BadArgument                 = ffi::FT_Err_Bad_Argument,
61    DivideByZero                = ffi::FT_Err_Divide_By_Zero,
62    InvalidReference            = ffi::FT_Err_Invalid_Reference,
63    DebugOpCode                 = ffi::FT_Err_Debug_OpCode,
64    ENDFInExecStream            = ffi::FT_Err_ENDF_In_Exec_Stream,
65    NestedDEFS                  = ffi::FT_Err_Nested_DEFS,
66    InvalidCodeRange            = ffi::FT_Err_Invalid_CodeRange,
67    ExecutionTooLong            = ffi::FT_Err_Execution_Too_Long,
68    TooManyFunctionDefs         = ffi::FT_Err_Too_Many_Function_Defs,
69    TooManyInstructionDefs      = ffi::FT_Err_Too_Many_Instruction_Defs,
70    TableMissing                = ffi::FT_Err_Table_Missing,
71    HorizHeaderMissing          = ffi::FT_Err_Horiz_Header_Missing,
72    LocationsMissing            = ffi::FT_Err_Locations_Missing,
73    NameTableMissing            = ffi::FT_Err_Name_Table_Missing,
74    CMapTableMissing            = ffi::FT_Err_CMap_Table_Missing,
75    HmtxTableMissing            = ffi::FT_Err_Hmtx_Table_Missing,
76    PostTableMissing            = ffi::FT_Err_Post_Table_Missing,
77    InvalidHorizMetrics         = ffi::FT_Err_Invalid_Horiz_Metrics,
78    InvalidCharMapFormat        = ffi::FT_Err_Invalid_CharMap_Format,
79    InvalidPPem                 = ffi::FT_Err_Invalid_PPem,
80    InvalidVertMetrics          = ffi::FT_Err_Invalid_Vert_Metrics,
81    CouldNotFindContext         = ffi::FT_Err_Could_Not_Find_Context,
82    InvalidPostTableFormat      = ffi::FT_Err_Invalid_Post_Table_Format,
83    InvalidPostTable            = ffi::FT_Err_Invalid_Post_Table,
84    Syntax                      = ffi::FT_Err_Syntax_Error,
85    StackUnderflow              = ffi::FT_Err_Stack_Underflow,
86    Ignore                      = ffi::FT_Err_Ignore,
87    NoUnicodeGlyphName          = ffi::FT_Err_No_Unicode_Glyph_Name,
88    MissingStartfontField       = ffi::FT_Err_Missing_Startfont_Field,
89    MissingFontField            = ffi::FT_Err_Missing_Font_Field,
90    MissingSizeField            = ffi::FT_Err_Missing_Size_Field,
91    MissingFontboundingboxField = ffi::FT_Err_Missing_Fontboundingbox_Field,
92    MissingCharsField           = ffi::FT_Err_Missing_Chars_Field,
93    MissingStartcharField       = ffi::FT_Err_Missing_Startchar_Field,
94    MissingEncodingField        = ffi::FT_Err_Missing_Encoding_Field,
95    MissingBbxField             = ffi::FT_Err_Missing_Bbx_Field,
96    BbxTooBig                   = ffi::FT_Err_Bbx_Too_Big,
97    CorruptedFontHeader         = ffi::FT_Err_Corrupted_Font_Header,
98    CorruptedFontGlyphs         = ffi::FT_Err_Corrupted_Font_Glyphs,
99    Max                         = ffi::FT_Err_Max,
100    UnexpectedPixelMode,
101    InvalidPath,
102    Unknown
103}
104
105impl From<i32> for Error {
106    fn from(err: i32) -> Self {
107        match err {
108            ffi::FT_Err_Ok                            => Error::Ok,
109            ffi::FT_Err_Cannot_Open_Resource          => Error::CannotOpenResource,
110            ffi::FT_Err_Unknown_File_Format           => Error::UnknownFileFormat,
111            ffi::FT_Err_Invalid_File_Format           => Error::InvalidFileFormat,
112            ffi::FT_Err_Invalid_Version               => Error::InvalidVersion,
113            ffi::FT_Err_Lower_Module_Version          => Error::LowerModuleVersion,
114            ffi::FT_Err_Invalid_Argument              => Error::InvalidArgument,
115            ffi::FT_Err_Unimplemented_Feature         => Error::UnimplementedFeature,
116            ffi::FT_Err_Invalid_Table                 => Error::InvalidTable,
117            ffi::FT_Err_Invalid_Offset                => Error::InvalidOffset,
118            ffi::FT_Err_Array_Too_Large               => Error::ArrayTooLarge,
119            ffi::FT_Err_Missing_Module                => Error::MissingModule,
120            ffi::FT_Err_Missing_Property              => Error::MissingProperty,
121            ffi::FT_Err_Invalid_Glyph_Index           => Error::InvalidGlyphIndex,
122            ffi::FT_Err_Invalid_Character_Code        => Error::InvalidCharacterCode,
123            ffi::FT_Err_Invalid_Glyph_Format          => Error::InvalidGlyphFormat,
124            ffi::FT_Err_Cannot_Render_Glyph           => Error::CannotRenderGlyph,
125            ffi::FT_Err_Invalid_Outline               => Error::InvalidOutline,
126            ffi::FT_Err_Invalid_Composite             => Error::InvalidComposite,
127            ffi::FT_Err_Too_Many_Hints                => Error::TooManyHints,
128            ffi::FT_Err_Invalid_Pixel_Size            => Error::InvalidPixelSize,
129            ffi::FT_Err_Invalid_Handle                => Error::InvalidHandle,
130            ffi::FT_Err_Invalid_Library_Handle        => Error::InvalidLibraryHandle,
131            ffi::FT_Err_Invalid_Driver_Handle         => Error::InvalidDriverHandle,
132            ffi::FT_Err_Invalid_Face_Handle           => Error::InvalidFaceHandle,
133            ffi::FT_Err_Invalid_Size_Handle           => Error::InvalidSizeHandle,
134            ffi::FT_Err_Invalid_Slot_Handle           => Error::InvalidSlotHandle,
135            ffi::FT_Err_Invalid_CharMap_Handle        => Error::InvalidCharMapHandle,
136            ffi::FT_Err_Invalid_Cache_Handle          => Error::InvalidCacheHandle,
137            ffi::FT_Err_Invalid_Stream_Handle         => Error::InvalidStreamHandle,
138            ffi::FT_Err_Too_Many_Drivers              => Error::TooManyDrivers,
139            ffi::FT_Err_Too_Many_Extensions           => Error::TooManyExtensions,
140            ffi::FT_Err_Out_Of_Memory                 => Error::OutOfMemory,
141            ffi::FT_Err_Unlisted_Object               => Error::UnlistedObject,
142            ffi::FT_Err_Cannot_Open_Stream            => Error::CannotOpenStream,
143            ffi::FT_Err_Invalid_Stream_Seek           => Error::InvalidStreamSeek,
144            ffi::FT_Err_Invalid_Stream_Skip           => Error::InvalidStreamSkip,
145            ffi::FT_Err_Invalid_Stream_Read           => Error::InvalidStreamRead,
146            ffi::FT_Err_Invalid_Stream_Operation      => Error::InvalidStreamOperation,
147            ffi::FT_Err_Invalid_Frame_Operation       => Error::InvalidFrameOperation,
148            ffi::FT_Err_Nested_Frame_Access           => Error::NestedFrameAccess,
149            ffi::FT_Err_Invalid_Frame_Read            => Error::InvalidFrameRead,
150            ffi::FT_Err_Raster_Uninitialized          => Error::RasterUninitialized,
151            ffi::FT_Err_Raster_Corrupted              => Error::RasterCorrupted,
152            ffi::FT_Err_Raster_Overflow               => Error::RasterOverflow,
153            ffi::FT_Err_Raster_Negative_Height        => Error::RasterNegativeHeight,
154            ffi::FT_Err_Too_Many_Caches               => Error::TooManyCaches,
155            ffi::FT_Err_Invalid_Opcode                => Error::InvalidOpcode,
156            ffi::FT_Err_Too_Few_Arguments             => Error::TooFewArguments,
157            ffi::FT_Err_Stack_Overflow                => Error::StackOverflow,
158            ffi::FT_Err_Code_Overflow                 => Error::CodeOverflow,
159            ffi::FT_Err_Bad_Argument                  => Error::BadArgument,
160            ffi::FT_Err_Divide_By_Zero                => Error::DivideByZero,
161            ffi::FT_Err_Invalid_Reference             => Error::InvalidReference,
162            ffi::FT_Err_Debug_OpCode                  => Error::DebugOpCode,
163            ffi::FT_Err_ENDF_In_Exec_Stream           => Error::ENDFInExecStream,
164            ffi::FT_Err_Nested_DEFS                   => Error::NestedDEFS,
165            ffi::FT_Err_Invalid_CodeRange             => Error::InvalidCodeRange,
166            ffi::FT_Err_Execution_Too_Long            => Error::ExecutionTooLong,
167            ffi::FT_Err_Too_Many_Function_Defs        => Error::TooManyFunctionDefs,
168            ffi::FT_Err_Too_Many_Instruction_Defs     => Error::TooManyInstructionDefs,
169            ffi::FT_Err_Table_Missing                 => Error::TableMissing,
170            ffi::FT_Err_Horiz_Header_Missing          => Error::HorizHeaderMissing,
171            ffi::FT_Err_Locations_Missing             => Error::LocationsMissing,
172            ffi::FT_Err_Name_Table_Missing            => Error::NameTableMissing,
173            ffi::FT_Err_CMap_Table_Missing            => Error::CMapTableMissing,
174            ffi::FT_Err_Hmtx_Table_Missing            => Error::HmtxTableMissing,
175            ffi::FT_Err_Post_Table_Missing            => Error::PostTableMissing,
176            ffi::FT_Err_Invalid_Horiz_Metrics         => Error::InvalidHorizMetrics,
177            ffi::FT_Err_Invalid_CharMap_Format        => Error::InvalidCharMapFormat,
178            ffi::FT_Err_Invalid_PPem                  => Error::InvalidPPem,
179            ffi::FT_Err_Invalid_Vert_Metrics          => Error::InvalidVertMetrics,
180            ffi::FT_Err_Could_Not_Find_Context        => Error::CouldNotFindContext,
181            ffi::FT_Err_Invalid_Post_Table_Format     => Error::InvalidPostTableFormat,
182            ffi::FT_Err_Invalid_Post_Table            => Error::InvalidPostTable,
183            ffi::FT_Err_Syntax_Error                  => Error::Syntax,
184            ffi::FT_Err_Stack_Underflow               => Error::StackUnderflow,
185            ffi::FT_Err_Ignore                        => Error::Ignore,
186            ffi::FT_Err_No_Unicode_Glyph_Name         => Error::NoUnicodeGlyphName,
187            ffi::FT_Err_Missing_Startfont_Field       => Error::MissingStartfontField,
188            ffi::FT_Err_Missing_Font_Field            => Error::MissingFontField,
189            ffi::FT_Err_Missing_Size_Field            => Error::MissingSizeField,
190            ffi::FT_Err_Missing_Fontboundingbox_Field => Error::MissingFontboundingboxField,
191            ffi::FT_Err_Missing_Chars_Field           => Error::MissingCharsField,
192            ffi::FT_Err_Missing_Startchar_Field       => Error::MissingStartcharField,
193            ffi::FT_Err_Missing_Encoding_Field        => Error::MissingEncodingField,
194            ffi::FT_Err_Missing_Bbx_Field             => Error::MissingBbxField,
195            ffi::FT_Err_Bbx_Too_Big                   => Error::BbxTooBig,
196            ffi::FT_Err_Corrupted_Font_Header         => Error::CorruptedFontHeader,
197            ffi::FT_Err_Corrupted_Font_Glyphs         => Error::CorruptedFontGlyphs,
198            ffi::FT_Err_Max                           => Error::Max,
199            _                                         => Error::Unknown
200        }
201    }
202}
203
204impl fmt::Display for Error {
205    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
206        f.write_str(self.describe())
207    }
208}
209
210impl Error {
211    fn describe(&self) -> &str {
212        use self::Error::*;
213        match *self {
214            Ok                           => "Ok",
215            CannotOpenResource           => "Cannot open resource",
216            UnknownFileFormat            => "Unknown file format",
217            InvalidFileFormat            => "Invalid file format",
218            InvalidVersion               => "Invalid version",
219            LowerModuleVersion           => "Lower module version",
220            InvalidArgument              => "Invalid argument",
221            UnimplementedFeature         => "Unimplemented feature",
222            InvalidTable                 => "Invalid table",
223            InvalidOffset                => "Invalid offset",
224            ArrayTooLarge                => "Array too large",
225            MissingModule                => "Missing module",
226            MissingProperty              => "Missing property",
227            InvalidGlyphIndex            => "Invalid glyph index",
228            InvalidCharacterCode         => "Invalid character code",
229            InvalidGlyphFormat           => "Invalid glyph format",
230            CannotRenderGlyph            => "Cannot render glyph",
231            InvalidOutline               => "Invalid outline",
232            InvalidComposite             => "Invalid composite",
233            TooManyHints                 => "Too many hints",
234            InvalidPixelSize             => "Invalid pixel size",
235            InvalidHandle                => "Invalid handle",
236            InvalidLibraryHandle         => "Invalid library handle",
237            InvalidDriverHandle          => "Invalid driver handle",
238            InvalidFaceHandle            => "Invalid face handle",
239            InvalidSizeHandle            => "Invalid size handle",
240            InvalidSlotHandle            => "Invalid slot handle",
241            InvalidCharMapHandle         => "Invalid char map handle",
242            InvalidCacheHandle           => "Invalid cache handle",
243            InvalidStreamHandle          => "Invalid stream handle",
244            TooManyDrivers               => "Too many drivers",
245            TooManyExtensions            => "Too many extensions",
246            OutOfMemory                  => "Out of memory",
247            UnlistedObject               => "Unlisted object",
248            CannotOpenStream             => "Cannot open stream",
249            InvalidStreamSeek            => "Invalid stream seek",
250            InvalidStreamSkip            => "Invalid stream skip",
251            InvalidStreamRead            => "Invalid stream read",
252            InvalidStreamOperation       => "Invalid stream operation",
253            InvalidFrameOperation        => "Invalid frame operation",
254            NestedFrameAccess            => "Nested frame access",
255            InvalidFrameRead             => "Invalid frame read",
256            RasterUninitialized          => "Raster uninitialized",
257            RasterCorrupted              => "Raster corrupted",
258            RasterOverflow               => "Raster overflow",
259            RasterNegativeHeight         => "Raster negative height",
260            TooManyCaches                => "Too many caches",
261            InvalidOpcode                => "Invalid opcode",
262            TooFewArguments              => "Too few arguments",
263            StackOverflow                => "Stack overflow",
264            CodeOverflow                 => "Code overflow",
265            BadArgument                  => "Bad argument",
266            DivideByZero                 => "Divide by zero",
267            InvalidReference             => "Invalid reference",
268            DebugOpCode                  => "Debug op code",
269            ENDFInExecStream             => "ENDF in exec stream",
270            NestedDEFS                   => "Nested DEFS",
271            InvalidCodeRange             => "Invalid code range",
272            ExecutionTooLong             => "Execution too long",
273            TooManyFunctionDefs          => "Too many function defs",
274            TooManyInstructionDefs       => "Too many instruction defs",
275            TableMissing                 => "Table missing",
276            HorizHeaderMissing           => "Horiz header missing",
277            LocationsMissing             => "Locations missing",
278            NameTableMissing             => "Name table missing",
279            CMapTableMissing             => "C map table missing",
280            HmtxTableMissing             => "Hmtx table missing",
281            PostTableMissing             => "Post table missing",
282            InvalidHorizMetrics          => "Invalid horiz metrics",
283            InvalidCharMapFormat         => "Invalid char map format",
284            InvalidPPem                  => "Invalid p pem",
285            InvalidVertMetrics           => "Invalid vert metrics",
286            CouldNotFindContext          => "Could not find context",
287            InvalidPostTableFormat       => "Invalid post table format",
288            InvalidPostTable             => "Invalid post table",
289            Syntax                       => "Syntax",
290            StackUnderflow               => "Stack underflow",
291            Ignore                       => "Ignore",
292            NoUnicodeGlyphName           => "No unicode glyph name",
293            MissingStartfontField        => "Missing startfont field",
294            MissingFontField             => "Missing font field",
295            MissingSizeField             => "Missing size field",
296            MissingFontboundingboxField  => "Missing fontboundingbox field",
297            MissingCharsField            => "Missing chars field",
298            MissingStartcharField        => "Missing startchar field",
299            MissingEncodingField         => "Missing encoding field",
300            MissingBbxField              => "Missing bbx field",
301            BbxTooBig                    => "Bbx too big",
302            CorruptedFontHeader          => "Corrupted font header",
303            CorruptedFontGlyphs          => "Corrupted font glyphs",
304            Max                          => "Max",
305            UnexpectedPixelMode          => "Unexpected pixel mode",
306            InvalidPath                  => "Invalid path",
307            Unknown                      => "Unknown",
308        }
309    }
310}
311
312pub(crate) fn from_ftret(c: i32) -> FtResult<()> {
313    if c == ffi::FT_Err_Ok { Ok(()) } else { Err(c.into()) }
314}