github.com/google/osv-scalibr@v0.4.1/binary/proto/package_metadata.go (about)

     1  // Copyright 2025 Google LLC
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //      http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package proto
    16  
    17  import (
    18  	"reflect"
    19  
    20  	"github.com/google/osv-scalibr/extractor/filesystem/language/dotnet/depsjson"
    21  	javascriptmeta "github.com/google/osv-scalibr/extractor/filesystem/language/javascript/packagejson/metadata"
    22  	"github.com/google/osv-scalibr/extractor/filesystem/language/python/wheelegg"
    23  	apkmeta "github.com/google/osv-scalibr/extractor/filesystem/os/apk/metadata"
    24  	cosmeta "github.com/google/osv-scalibr/extractor/filesystem/os/cos/metadata"
    25  	dpkgmeta "github.com/google/osv-scalibr/extractor/filesystem/os/dpkg/metadata"
    26  	flatpakmeta "github.com/google/osv-scalibr/extractor/filesystem/os/flatpak/metadata"
    27  	"github.com/google/osv-scalibr/extractor/filesystem/os/macapps"
    28  	macportsmeta "github.com/google/osv-scalibr/extractor/filesystem/os/macports/metadata"
    29  	nixmeta "github.com/google/osv-scalibr/extractor/filesystem/os/nix/metadata"
    30  	pacmanmeta "github.com/google/osv-scalibr/extractor/filesystem/os/pacman/metadata"
    31  	portagemeta "github.com/google/osv-scalibr/extractor/filesystem/os/portage/metadata"
    32  	rpmmeta "github.com/google/osv-scalibr/extractor/filesystem/os/rpm/metadata"
    33  	snapmeta "github.com/google/osv-scalibr/extractor/filesystem/os/snap/metadata"
    34  	wingetmeta "github.com/google/osv-scalibr/extractor/filesystem/os/winget/metadata"
    35  	asdfmeta "github.com/google/osv-scalibr/extractor/filesystem/runtime/asdf/metadata"
    36  	nodeversionmeta "github.com/google/osv-scalibr/extractor/filesystem/runtime/nodejs/nodeversion/metadata"
    37  	nvmmeta "github.com/google/osv-scalibr/extractor/filesystem/runtime/nodejs/nvm/metadata"
    38  	"github.com/google/osv-scalibr/extractor/standalone/os/netports"
    39  
    40  	spb "github.com/google/osv-scalibr/binary/proto/scan_result_go_proto"
    41  )
    42  
    43  var (
    44  	metadataTypeToStructConverter = map[reflect.Type]func(*spb.Package) any{
    45  		reflect.TypeFor[*spb.Package_PythonMetadata](): func(p *spb.Package) any {
    46  			return wheelegg.ToStruct(p.GetPythonMetadata())
    47  		},
    48  		reflect.TypeFor[*spb.Package_JavascriptMetadata](): func(p *spb.Package) any {
    49  			return javascriptmeta.ToStruct(p.GetJavascriptMetadata())
    50  		},
    51  		reflect.TypeFor[*spb.Package_DepsjsonMetadata](): func(p *spb.Package) any {
    52  			return depsjson.ToStruct(p.GetDepsjsonMetadata())
    53  		},
    54  		reflect.TypeFor[*spb.Package_NetportsMetadata](): func(p *spb.Package) any {
    55  			return netports.ToStruct(p.GetNetportsMetadata())
    56  		},
    57  		reflect.TypeFor[*spb.Package_ApkMetadata](): func(p *spb.Package) any {
    58  			return apkmeta.ToStruct(p.GetApkMetadata())
    59  		},
    60  		reflect.TypeFor[*spb.Package_DpkgMetadata](): func(p *spb.Package) any {
    61  			return dpkgmeta.ToStruct(p.GetDpkgMetadata())
    62  		},
    63  		reflect.TypeFor[*spb.Package_SnapMetadata](): func(p *spb.Package) any {
    64  			return snapmeta.ToStruct(p.GetSnapMetadata())
    65  		},
    66  		reflect.TypeFor[*spb.Package_RpmMetadata](): func(p *spb.Package) any {
    67  			return rpmmeta.ToStruct(p.GetRpmMetadata())
    68  		},
    69  		reflect.TypeFor[*spb.Package_CosMetadata](): func(p *spb.Package) any {
    70  			return cosmeta.ToStruct(p.GetCosMetadata())
    71  		},
    72  		reflect.TypeFor[*spb.Package_PacmanMetadata](): func(p *spb.Package) any {
    73  			return pacmanmeta.ToStruct(p.GetPacmanMetadata())
    74  		},
    75  		reflect.TypeFor[*spb.Package_PortageMetadata](): func(p *spb.Package) any {
    76  			return portagemeta.ToStruct(p.GetPortageMetadata())
    77  		},
    78  		reflect.TypeFor[*spb.Package_FlatpakMetadata](): func(p *spb.Package) any {
    79  			return flatpakmeta.ToStruct(p.GetFlatpakMetadata())
    80  		},
    81  		reflect.TypeFor[*spb.Package_NixMetadata](): func(p *spb.Package) any {
    82  			return nixmeta.ToStruct(p.GetNixMetadata())
    83  		},
    84  		reflect.TypeFor[*spb.Package_MacAppsMetadata](): func(p *spb.Package) any {
    85  			return macapps.ToStruct(p.GetMacAppsMetadata())
    86  		},
    87  		reflect.TypeFor[*spb.Package_AsdfMetadata](): func(p *spb.Package) any {
    88  			return asdfmeta.ToStruct(p.GetAsdfMetadata())
    89  		},
    90  		reflect.TypeFor[*spb.Package_NvmMetadata](): func(p *spb.Package) any {
    91  			return nvmmeta.ToStruct(p.GetNvmMetadata())
    92  		},
    93  		reflect.TypeFor[*spb.NodeVersionMetadata](): func(p *spb.Package) any {
    94  			return nodeversionmeta.ToStruct(p.GetNodeversionMetadata())
    95  		},
    96  		reflect.TypeFor[*spb.Package_MacportsMetadata](): func(p *spb.Package) any {
    97  			return macportsmeta.ToStruct(p.GetMacportsMetadata())
    98  		},
    99  		reflect.TypeFor[*spb.Package_WingetMetadata](): func(p *spb.Package) any {
   100  			return wingetmeta.ToStruct(p.GetWingetMetadata())
   101  		},
   102  	}
   103  
   104  	_ = []MetadataProtoSetter{
   105  		(*wheelegg.PythonPackageMetadata)(nil),
   106  		(*javascriptmeta.JavascriptPackageJSONMetadata)(nil),
   107  		(*depsjson.Metadata)(nil),
   108  		(*netports.Metadata)(nil),
   109  		(*apkmeta.Metadata)(nil),
   110  		(*dpkgmeta.Metadata)(nil),
   111  		(*snapmeta.Metadata)(nil),
   112  		(*rpmmeta.Metadata)(nil),
   113  		(*cosmeta.Metadata)(nil),
   114  		(*pacmanmeta.Metadata)(nil),
   115  		(*portagemeta.Metadata)(nil),
   116  		(*flatpakmeta.Metadata)(nil),
   117  		(*nixmeta.Metadata)(nil),
   118  		(*macapps.Metadata)(nil),
   119  		(*asdfmeta.Metadata)(nil),
   120  		(*nvmmeta.Metadata)(nil),
   121  		(*nodeversionmeta.Metadata)(nil),
   122  		(*macportsmeta.Metadata)(nil),
   123  		(*wingetmeta.Metadata)(nil),
   124  	}
   125  )