diff --git a/godal.go b/godal.go index 5edb477..6e1e185 100644 --- a/godal.go +++ b/godal.go @@ -3898,6 +3898,11 @@ func RegisterVSIHandler(prefix string, handler KeySizerReaderAt, opts ...VSIHand return nil } +// HasVSIHandler returns true if a VSIHandler is registered for this prefix +func HasVSIHandler(prefix string) bool { + return handlers != nil && handlers[prefix].KeySizerReaderAt != nil +} + // BuildVRT runs the GDALBuildVRT function and creates a VRT dataset from a list of datasets func BuildVRT(dstVRTName string, sourceDatasets []string, switches []string, opts ...BuildVRTOption) (*Dataset, error) { bvo := buildVRTOpts{} diff --git a/godal_test.go b/godal_test.go index 85099e7..8b4faf8 100644 --- a/godal_test.go +++ b/godal_test.go @@ -3459,6 +3459,22 @@ func (mvp mvpHandler) ReadAtMulti(k string, buf [][]byte, off []int64) ([]int, e } return b.(KeyMultiReader).ReadAtMulti(k, buf, off) } +func TestHasVSIHandler(t *testing.T) { // stripPrefix false + assert.False(t, HasVSIHandler("unregistered_prefix://")) + + vpa := vpHandler{datas: make(map[string]KeySizerReaderAt)} + err := RegisterVSIHandler("registered_prefix://", vpa, VSIHandlerStripPrefix(false)) + assert.NoError(t, err) + assert.True(t, HasVSIHandler("registered_prefix://")) + + // nil handler + err = RegisterVSIHandler("nil_prefix://", nil) + assert.NoError(t, err) + assert.False(t, HasVSIHandler("nil_prefix://")) + + // unregistered_prefix + assert.False(t, HasVSIHandler("unregistered_prefix://")) +} func TestVSIPrefix(t *testing.T) { tifdat, _ := ioutil.ReadFile("testdata/test.tif")