1234567891011121314151617181920212223242526272829303132333435363738394041424344(*****************************************************************************)(* *)(* Copyright (C) 2026 Yves Ndiaye *)(* *)(* This Source Code Form is subject to the terms of the Mozilla Public *)(* License, v. 2.0. If a copy of the MPL was not distributed with this *)(* file, You can obtain one at https://mozilla.org/MPL/2.0/. *)(* *)(*****************************************************************************)moduleKeys=structletartist="artist"letalbum="album"lettitle="title"endtypet={artist:string;album:string;title:string}letsection="default"letinit~artist~album~title={artist;album;title}letmissing_artist="__unknwon-artist__"letmissing_album="__unknown-album__"letmissing_title="__NO_TITLE__"letdefault=init~artist:missing_artist~album:missing_album~title:missing_titleletconv~defaultkeysection=matchSection.assockeysectionwithSomee->e|None->defaultletof_sectionsection=letartist=conv~default:missing_artistKeys.artistsectioninletalbum=conv~default:missing_albumKeys.albumsectioninlettitle=conv~default:missing_titleKeys.titlesectionin{artist;album;title}letto_sectiont=let{artist;album;title}=tinSection.initsection[(Keys.artist,artist);(Keys.album,album);(Keys.title,title)]lettitlet=t.titleletalbumt=t.albumletartistt=t.title