`GIcon` is a very minimal interface for icons.
It provides functions for checking the equality of two icons, hashing of icons and serializing an icon to and from strings.
`GIcon` does not provide the actual pixmap for the icon as this is out of GIO's scope, however implementations of `GIcon` may contain the name of an icon (see [class@Gio.ThemedIcon]), or the path to an icon (see [iface@Gio.LoadableIcon]).
To obtain a hash of a `GIcon`, see [method@Gio.Icon.hash].
To check if two `GIcon`s are equal, see [method@Gio.Icon.equal].
For serializing a `GIcon`, use [method@Gio.Icon.serialize] and [func@Gio.Icon.deserialize].
If you want to consume `GIcon` (for example, in a toolkit) you must be prepared to handle at least the three following cases: [ iface@Gio.LoadableIcon], [class@Gio.ThemedIcon] and [class@Gio.EmblemedIcon]. It may also make sense to have fast-paths for other cases ( like handling `GdkPixbuf` directly, for example) but all compliant `GIcon` implementations outside of GIO must implement [iface@Gio.LoadableIcon].
If your application or library provides one or more `GIcon` implementations you need to ensure that your new implementation also implements [iface@Gio.LoadableIcon]. Additionally, you must provide an implementation of [method@Gio.Icon.serialize] that gives a result that is understood by [func@Gio.Icon.deserialize], yielding one of the built-in icon types.