package oid

import (
	"encoding/asn1"
)

// Getter returns an ASN.1 Object Identifier.
type Getter interface {
	OID() asn1.ObjectIdentifier
}

// Here we define OIDs for different CSPs. Currently this is used in attested TLS to distinguish the attestation documents.
// OIDs beginning with 1.3.9900 are reserved and can be used without registration.

// Dummy OID for testing.
type Dummy struct{}

// OID returns the struct's object identifier.
func (Dummy) OID() asn1.ObjectIdentifier {
	return asn1.ObjectIdentifier{1, 3, 9900, 1}
}

// AWS holds the AWS OID.
type AWS struct{}

// OID returns the struct's object identifier.
func (AWS) OID() asn1.ObjectIdentifier {
	return asn1.ObjectIdentifier{1, 3, 9900, 2}
}

// GCP holds the GCP OID.
type GCP struct{}

// OID returns the struct's object identifier.
func (GCP) OID() asn1.ObjectIdentifier {
	return asn1.ObjectIdentifier{1, 3, 9900, 3}
}

// Azure holds the Azure OID.
type Azure struct{}

// OID returns the struct's object identifier.
func (Azure) OID() asn1.ObjectIdentifier {
	return asn1.ObjectIdentifier{1, 3, 9900, 4}
}

// QEMU holds the QEMU OID.
type QEMU struct{}

// OID returns the struct's object identifier.
func (QEMU) OID() asn1.ObjectIdentifier {
	return asn1.ObjectIdentifier{1, 3, 9900, 5}
}