// Code generated by ndpgen. DO NOT EDIT. // // This file contains export wrappers for the SonicSimilarity capability. // It is intended for use in Navidrome plugins built with TinyGo. // //go:build wasip1 package sonicsimilarity import ( "github.com/navidrome/navidrome/plugins/pdk/go/pdk" ) // FindSonicPathRequest represents the FindSonicPathRequest data structure. type FindSonicPathRequest struct { StartSong SongRef `json:"startSong"` EndSong SongRef `json:"endSong"` Count int32 `json:"count"` } // GetSonicSimilarTracksRequest represents the GetSonicSimilarTracksRequest data structure. type GetSonicSimilarTracksRequest struct { Song SongRef `json:"song"` Count int32 `json:"count"` } // SongRef is a reference to a song with metadata for matching. type SongRef struct { // ID is the internal Navidrome mediafile ID (if known). ID string `json:"id,omitempty"` // Name is the song name. Name string `json:"name"` // MBID is the MusicBrainz ID for the song. MBID string `json:"mbid,omitempty"` // ISRC is the International Standard Recording Code for the song. ISRC string `json:"isrc,omitempty"` // Artist is the artist name. Artist string `json:"artist,omitempty"` // ArtistMBID is the MusicBrainz artist ID. ArtistMBID string `json:"artistMbid,omitempty"` // Album is the album name. Album string `json:"album,omitempty"` // AlbumMBID is the MusicBrainz release ID. AlbumMBID string `json:"albumMbid,omitempty"` // Duration is the song duration in seconds. Duration float32 `json:"duration,omitempty"` } // SonicMatch represents the SonicMatch data structure. type SonicMatch struct { Song SongRef `json:"song"` Similarity float64 `json:"similarity"` } // SonicSimilarityResponse represents the SonicSimilarityResponse data structure. type SonicSimilarityResponse struct { Matches []SonicMatch `json:"matches"` } // SonicSimilarity requires all methods to be implemented. // SonicSimilarity provides audio-similarity based track discovery. type SonicSimilarity interface { // GetSonicSimilarTracks GetSonicSimilarTracks(GetSonicSimilarTracksRequest) (SonicSimilarityResponse, error) // FindSonicPath FindSonicPath(FindSonicPathRequest) (SonicSimilarityResponse, error) } // Internal implementation holders var ( sonicSimilarTracksImpl func(GetSonicSimilarTracksRequest) (SonicSimilarityResponse, error) findSonicPathImpl func(FindSonicPathRequest) (SonicSimilarityResponse, error) ) // Register registers a sonicsimilarity implementation. // All methods are required. func Register(impl SonicSimilarity) { sonicSimilarTracksImpl = impl.GetSonicSimilarTracks findSonicPathImpl = impl.FindSonicPath } // NotImplementedCode is the standard return code for unimplemented functions. // The host recognizes this and skips the plugin gracefully. const NotImplementedCode int32 = -2 //go:wasmexport nd_get_sonic_similar_tracks func _NdGetSonicSimilarTracks() int32 { if sonicSimilarTracksImpl == nil { // Return standard code - host will skip this plugin gracefully return NotImplementedCode } var input GetSonicSimilarTracksRequest if err := pdk.InputJSON(&input); err != nil { pdk.SetError(err) return -1 } output, err := sonicSimilarTracksImpl(input) if err != nil { pdk.SetError(err) return -1 } if err := pdk.OutputJSON(output); err != nil { pdk.SetError(err) return -1 } return 0 } //go:wasmexport nd_find_sonic_path func _NdFindSonicPath() int32 { if findSonicPathImpl == nil { // Return standard code - host will skip this plugin gracefully return NotImplementedCode } var input FindSonicPathRequest if err := pdk.InputJSON(&input); err != nil { pdk.SetError(err) return -1 } output, err := findSonicPathImpl(input) if err != nil { pdk.SetError(err) return -1 } if err := pdk.OutputJSON(output); err != nil { pdk.SetError(err) return -1 } return 0 }