tags: fix index() lifetime bind
The signature for TagListRef::index
didn't bind the lifetime of the returned
TagValue
to &self
. This causes the following code to compile:
1 let title = {
2 let mut tags = TagList::new();
3 {
4 let tags = tags.get_mut().unwrap();
5 tags.add::<Title>(&"some title", TagMergeMode::Append);
6 }
7
8 let title = tags.index::<Title>(0).unwrap();
9 assert_eq!(title.get(), "some title");
10
11 title
12 };
13
14 assert_eq!(title.get(), "some title");
... but it panics at runtime on the last title.get()
:
Invalid tag type: WrongValueType(ValueTypeMismatchError
{ actual: <invalid>, requested: gchararray })
Indeed, the title
TagValue
is freed with the tags
on line 12.
This commit fixes the function signature so the returned TagValue
can't
outlive its TagListRef
.