symphonia_metadata/
itunes.rs

1// Symphonia
2// Copyright (c) 2019-2022 The Project Symphonia Developers.
3//
4// This Source Code Form is subject to the terms of the Mozilla Public
5// License, v. 2.0. If a copy of the MPL was not distributed with this
6// file, You can obtain one at https://mozilla.org/MPL/2.0/.
7
8//! iTunes metadata support.
9
10use symphonia_core::meta::StandardTagKey;
11
12use std::collections::HashMap;
13
14use lazy_static::lazy_static;
15
16lazy_static! {
17    static ref ITUNES_TAG_MAP: HashMap<&'static str, StandardTagKey> = {
18        let mut m = HashMap::new();
19        m.insert("com.apple.iTunes:ARTISTS", StandardTagKey::Artist);
20        m.insert("com.apple.iTunes:ASIN", StandardTagKey::IdentAsin);
21        m.insert("com.apple.iTunes:BARCODE", StandardTagKey::IdentBarcode);
22        m.insert("com.apple.iTunes:CATALOGNUMBER", StandardTagKey::IdentCatalogNumber);
23        m.insert("com.apple.iTunes:CONDUCTOR", StandardTagKey::Conductor);
24        m.insert("com.apple.iTunes:DISCSUBTITLE", StandardTagKey::DiscSubtitle);
25        m.insert("com.apple.iTunes:DJMIXER", StandardTagKey::MixDj);
26        m.insert("com.apple.iTunes:ENGINEER", StandardTagKey::Engineer);
27        m.insert("com.apple.iTunes:ISRC", StandardTagKey::IdentIsrc);
28        m.insert("com.apple.iTunes:LABEL", StandardTagKey::Label);
29        m.insert("com.apple.iTunes:LANGUAGE", StandardTagKey::Language);
30        m.insert("com.apple.iTunes:LICENSE", StandardTagKey::License);
31        m.insert("com.apple.iTunes:LYRICIST", StandardTagKey::Lyricist);
32        m.insert("com.apple.iTunes:MEDIA", StandardTagKey::MediaFormat);
33        m.insert("com.apple.iTunes:MIXER", StandardTagKey::MixEngineer);
34        m.insert("com.apple.iTunes:MOOD", StandardTagKey::Mood);
35        m.insert(
36            "com.apple.iTunes:MusicBrainz Album Artist Id",
37            StandardTagKey::MusicBrainzAlbumArtistId,
38        );
39        m.insert("com.apple.iTunes:MusicBrainz Album Id", StandardTagKey::MusicBrainzAlbumId);
40        m.insert(
41            "com.apple.iTunes:MusicBrainz Album Release Country",
42            StandardTagKey::ReleaseCountry,
43        );
44        m.insert(
45            "com.apple.iTunes:MusicBrainz Album Status",
46            StandardTagKey::MusicBrainzReleaseStatus,
47        );
48        m.insert("com.apple.iTunes:MusicBrainz Album Type", StandardTagKey::MusicBrainzReleaseType);
49        m.insert("com.apple.iTunes:MusicBrainz Artist Id", StandardTagKey::MusicBrainzArtistId);
50        m.insert(
51            "com.apple.iTunes:MusicBrainz Release Group Id",
52            StandardTagKey::MusicBrainzReleaseGroupId,
53        );
54        m.insert(
55            "com.apple.iTunes:MusicBrainz Release Track Id",
56            StandardTagKey::MusicBrainzReleaseTrackId,
57        );
58        m.insert("com.apple.iTunes:MusicBrainz Track Id", StandardTagKey::MusicBrainzTrackId);
59        m.insert("com.apple.iTunes:MusicBrainz Work Id", StandardTagKey::MusicBrainzWorkId);
60        m.insert("com.apple.iTunes:originaldate", StandardTagKey::OriginalDate);
61        m.insert("com.apple.iTunes:PRODUCER", StandardTagKey::Producer);
62        m.insert("com.apple.iTunes:REMIXER", StandardTagKey::Remixer);
63        m.insert("com.apple.iTunes:SCRIPT", StandardTagKey::Script);
64        m.insert("com.apple.iTunes:SUBTITLE", StandardTagKey::TrackSubtitle);
65        m
66    };
67}
68
69/// Try to map the iTunes `tag` name to a `StandardTagKey`.
70pub fn std_key_from_tag(key: &str) -> Option<StandardTagKey> {
71    ITUNES_TAG_MAP.get(key).copied()
72}