// Tags retrieves the Set of tags attached to the udev device. func (d *Device) Tags() (r map[string]struct{}) { d.lock() defer d.unlock() r = make(map[string]struct{}) for l := C.udev_device_get_tags_list_entry(d.ptr); l != nil; l = C.udev_list_entry_get_next(l) { r[C.GoString(C.udev_list_entry_get_name(l))] = struct{}{} } return }
// TagIterator returns an Iterator over the tags attached to the udev device. // The Iterator is using the github.com/jkeiser/iter package. // Values are returned as an interface{} and should be cast to string. func (d *Device) TagIterator() iter.Iterator { d.lock() defer d.unlock() l := C.udev_device_get_tags_list_entry(d.ptr) return iter.Iterator{ Next: func() (item interface{}, err error) { d.lock() defer d.unlock() if l != nil { item = C.GoString(C.udev_list_entry_get_name(l)) l = C.udev_list_entry_get_next(l) } else { err = iter.FINISHED } return }, Close: func() { }, } }