This API is used to split text rendering into a series of runs, each of which contains a number of glyphs for a single font/style. I gave implementing it a shot, but I ran into some snags. Note that this is my first time attempting to use the gir generator, so I may very well be doing something stupid.
thread 'main' panicked at 'Missing memory management functions for Pango.AttrIterator {Copy: "pango_attr_iterator_copy"}', gir/src/codegen/record.rs:21
I implemented a hack in the generator to see how far I could get, but encountered some more errors as well.
When compiling with my hack (and a few more changes), code generation succeeded. When compiling I get some compile errors, mainly related to the FromGlib*
and ToGlib*
traits.
Documenting pango v0.1.3 (file:///home/hansihe/git/pango)
error: no method named `to_glib_none_mut` found for type `std::option::Option<&auto::attr_iterator::AttrIterator>` in the current scope
--> src/auto/functions.rs:169:171
|
169 | FromGlibPtrContainer::from_glib_full(ffi::pango_itemize(context.to_glib_none().0, text.to_glib_none().0, start_index, length, attrs.to_glib_none().0, cached_iter.to_glib_none_mut().0))
| ^^^^^^^^^^^^^^^^
error[E0277]: the trait bound `std::vec::Vec<item::Item>: glib::translate::FromGlibPtrContainer<_, *mut glib_sys::GList>` is not satisfied
--> src/auto/functions.rs:169:9
|
169 | FromGlibPtrContainer::from_glib_full(ffi::pango_itemize(context.to_glib_none().0, text.to_glib_none().0, start_index, length, attrs.to_glib_none().0, cached_iter.to_glib_none_mut().0))
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `glib::translate::FromGlibPtrContainer<_, *mut glib_sys::GList>` is not implemented for `std::vec::Vec<item::Item>`
|
= help: the following implementations were found:
<std::vec::Vec<T> as glib::translate::FromGlibPtrContainer<P, *const P>>
<std::vec::Vec<T> as glib::translate::FromGlibPtrContainer<P, *mut P>>
<std::vec::Vec<T> as glib::translate::FromGlibPtrContainer<<T as glib::translate::GlibPtrDefault>::GlibType, *mut glib_sys::GSList>>
<std::vec::Vec<T> as glib::translate::FromGlibPtrContainer<<T as glib::translate::GlibPtrDefault>::GlibType, *mut glib_sys::GList>>
<std::vec::Vec<T> as glib::translate::FromGlibPtrContainer<<T as glib::translate::GlibPtrDefault>::GlibType, *const glib_sys::GList>>
= note: required by `glib::translate::FromGlibPtrContainer::from_glib_full`
error: no method named `to_glib_none_mut` found for type `std::option::Option<&auto::attr_iterator::AttrIterator>` in the current scope
--> src/auto/functions.rs:176:205
|
176 | FromGlibPtrContainer::from_glib_full(ffi::pango_itemize_with_base_dir(context.to_glib_none().0, base_dir.to_glib(), text.to_glib_none().0, start_index, length, attrs.to_glib_none().0, cached_iter.to_glib_none_mut().0))
| ^^^^^^^^^^^^^^^^
error[E0277]: the trait bound `std::vec::Vec<item::Item>: glib::translate::FromGlibPtrContainer<_, *mut glib_sys::GList>` is not satisfied
--> src/auto/functions.rs:176:9
|
176 | FromGlibPtrContainer::from_glib_full(ffi::pango_itemize_with_base_dir(context.to_glib_none().0, base_dir.to_glib(), text.to_glib_none().0, start_index, length, attrs.to_glib_none().0, cached_iter.to_glib_none_mut().0))
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `glib::translate::FromGlibPtrContainer<_, *mut glib_sys::GList>` is not implemented for `std::vec::Vec<item::Item>`
|
= help: the following implementations were found:
<std::vec::Vec<T> as glib::translate::FromGlibPtrContainer<P, *const P>>
<std::vec::Vec<T> as glib::translate::FromGlibPtrContainer<P, *mut P>>
<std::vec::Vec<T> as glib::translate::FromGlibPtrContainer<<T as glib::translate::GlibPtrDefault>::GlibType, *mut glib_sys::GSList>>
<std::vec::Vec<T> as glib::translate::FromGlibPtrContainer<<T as glib::translate::GlibPtrDefault>::GlibType, *mut glib_sys::GList>>
<std::vec::Vec<T> as glib::translate::FromGlibPtrContainer<<T as glib::translate::GlibPtrDefault>::GlibType, *const glib_sys::GList>>
= note: required by `glib::translate::FromGlibPtrContainer::from_glib_full`
error: no method named `to_glib_none` found for type `&[&item::Item]` in the current scope
--> src/auto/functions.rs:250:85
|
250 | FromGlibPtrContainer::from_glib_full(ffi::pango_reorder_items(logical_items.to_glib_none().0))
| ^^^^^^^^^^^^
|
= note: the method `to_glib_none` exists but the following trait bounds were not satisfied: `&item::Item : glib::translate::ToGlibPtr<_>`, `&item::Item : glib::translate::GlibPtrDefault`, `&item::Item : glib::translate::ToGlibPtr<_>`, `item::Item : glib::translate::GlibPtrDefault`, `item::Item : glib::translate::GlibPtrDefault`, `&item::Item : glib::translate::GlibPtrDefault`, `&item::Item : glib::translate::ToGlibPtr<_>`, `item::Item : glib::translate::GlibPtrDefault`, `item::Item : glib::translate::GlibPtrDefault`, `[&item::Item] : glib::translate::ToGlibPtr<_>`, `&item::Item : glib::translate::ToGlibPtr<_>`, `&item::Item : glib::translate::GlibPtrDefault`, `&item::Item : glib::translate::ToGlibPtr<_>`, `item::Item : glib::translate::GlibPtrDefault`, `item::Item : glib::translate::GlibPtrDefault`, `&item::Item : glib::translate::GlibPtrDefault`, `&item::Item : glib::translate::ToGlibPtr<_>`, `item::Item : glib::translate::GlibPtrDefault`, `item::Item : glib::translate::GlibPtrDefault`
error[E0277]: the trait bound `std::vec::Vec<item::Item>: glib::translate::FromGlibPtrContainer<_, *mut glib_sys::GList>` is not satisfied
--> src/auto/functions.rs:250:9
|
250 | FromGlibPtrContainer::from_glib_full(ffi::pango_reorder_items(logical_items.to_glib_none().0))
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `glib::translate::FromGlibPtrContainer<_, *mut glib_sys::GList>` is not implemented for `std::vec::Vec<item::Item>`
|
= help: the following implementations were found:
<std::vec::Vec<T> as glib::translate::FromGlibPtrContainer<P, *const P>>
<std::vec::Vec<T> as glib::translate::FromGlibPtrContainer<P, *mut P>>
<std::vec::Vec<T> as glib::translate::FromGlibPtrContainer<<T as glib::translate::GlibPtrDefault>::GlibType, *mut glib_sys::GSList>>
<std::vec::Vec<T> as glib::translate::FromGlibPtrContainer<<T as glib::translate::GlibPtrDefault>::GlibType, *mut glib_sys::GList>>
<std::vec::Vec<T> as glib::translate::FromGlibPtrContainer<<T as glib::translate::GlibPtrDefault>::GlibType, *const glib_sys::GList>>
= note: required by `glib::translate::FromGlibPtrContainer::from_glib_full`
error: Compilation failed, aborting rustdoc
error: Could not document `pango`.
To learn more, run the command again with --verbose.