🏡 index : quine-global/quintodrome.git

// 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"
	"github.com/navidrome/navidrome/plugins/pdk/go/types"
)

// Deprecated: use types.ArtistRef.
type ArtistRef = types.ArtistRef

// Deprecated: use types.SongRef.
type SongRef = types.SongRef

// FindSonicPathRequest represents the FindSonicPathRequest data structure.
type FindSonicPathRequest struct {
	StartSong types.SongRef `json:"startSong"`
	EndSong   types.SongRef `json:"endSong"`
	Count     int32         `json:"count"`
}

// GetSonicSimilarTracksRequest represents the GetSonicSimilarTracksRequest data structure.
type GetSonicSimilarTracksRequest struct {
	Song  types.SongRef `json:"song"`
	Count int32         `json:"count"`
}

// SonicMatch represents the SonicMatch data structure.
type SonicMatch struct {
	Song       types.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
}