github.com/rclone/rclone@v1.66.1-0.20240517100346-7b89735ae726/fs/metadata_mapper_code.go (about)

     1  //go:build ignore
     2  
     3  // A simple metadata mapper for testing purposes
     4  package main
     5  
     6  import (
     7  	"encoding/json"
     8  	"fmt"
     9  	"log"
    10  	"os"
    11  )
    12  
    13  func check[T comparable](in map[string]any, key string, want T) {
    14  	value, ok := in[key]
    15  	if !ok {
    16  		fmt.Fprintf(os.Stderr, "%s key not found\n", key)
    17  		os.Exit(1)
    18  	}
    19  	if value.(T) != want {
    20  		fmt.Fprintf(os.Stderr, "%s wrong - expecting %s but got %s\n", key, want, value)
    21  		os.Exit(1)
    22  	}
    23  }
    24  
    25  func main() {
    26  	// Read the input
    27  	var in map[string]any
    28  	err := json.NewDecoder(os.Stdin).Decode(&in)
    29  	if err != nil {
    30  		log.Fatal(err)
    31  	}
    32  
    33  	// Check the input
    34  	metadata, ok := in["Metadata"]
    35  	if !ok {
    36  		fmt.Fprintf(os.Stderr, "Metadata key not found\n")
    37  		os.Exit(1)
    38  	}
    39  	check(in, "Size", 5.0)
    40  	check(in, "SrcFs", "memory:")
    41  	check(in, "SrcFsType", "object.memoryFs")
    42  	check(in, "DstFs", "dstFs:dstFsRoot")
    43  	check(in, "DstFsType", "mockfs")
    44  	check(in, "Remote", "file.txt")
    45  	check(in, "MimeType", "text/plain; charset=utf-8")
    46  	check(in, "ModTime", "2001-02-03T04:05:06.000000007Z")
    47  	check(in, "IsDir", false)
    48  	//check(in, "ID", "Potato")
    49  
    50  	// Map the metadata
    51  	metadataOut := map[string]string{}
    52  	var out = map[string]any{
    53  		"Metadata": metadataOut,
    54  	}
    55  	for k, v := range metadata.(map[string]any) {
    56  		switch k {
    57  		case "error":
    58  			fmt.Fprintf(os.Stderr, "Error: %s\n", v)
    59  			os.Exit(1)
    60  		case "key1":
    61  			v = "two " + v.(string)
    62  		case "key3":
    63  			continue
    64  		}
    65  		metadataOut[k] = v.(string)
    66  	}
    67  	metadataOut["key0"] = "cabbage"
    68  
    69  	// Write the output
    70  	json.NewEncoder(os.Stdout).Encode(&out)
    71  	if err != nil {
    72  		log.Fatal(err)
    73  	}
    74  }