package client
import (
"context"
"fmt"
"github.com/hashicorp/terraform-plugin-framework/datasource"
"github.com/hashicorp/terraform-plugin-framework/resource"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker"
)
type Client struct {
Provider any
}
func DataSource ( ctx context . Context , req * datasource . ConfigureRequest , resp * datasource . ConfigureResponse ) * Client {
if req . ProviderData == nil {
tflog . Error ( ctx , "Provider Configure is nill" )
return nil
}
res := Client { }
if decort , ok := req . ProviderData . ( * decort . DecortClient ) ; ok {
res . Provider = decort
return & res
}
if bvs , ok := req . ProviderData . ( * decort . BVSDecortClient ) ; ok {
res . Provider = bvs
return & res
}
resp . Diagnostics . AddError (
"Unexpected Data Source Configure Type" ,
fmt . Sprintf ( "Expected *decort.DecortClient or *decort.BVSDecortClient, got: %T. Please report this issue to the provider developers." , req . ProviderData ) ,
)
return nil
}
func Resource ( ctx context . Context , req * resource . ConfigureRequest , resp * resource . ConfigureResponse ) * Client {
if req . ProviderData == nil {
tflog . Error ( ctx , "Provider Configure is nill" )
return nil
}
res := Client { }
if decort , ok := req . ProviderData . ( * decort . DecortClient ) ; ok {
res . Provider = decort
return & res
}
if bvs , ok := req . ProviderData . ( * decort . BVSDecortClient ) ; ok {
res . Provider = bvs
return & res
}
resp . Diagnostics . AddError (
"Unexpected Data Source Configure Type" ,
fmt . Sprintf ( "Expected *decort.DecortClient or *decort.BVSDecortClient, got: %T. Please report this issue to the provider developers." , req . ProviderData ) ,
)
return nil
}
func ( c * Client ) CloudAPI ( ) * cloudapi . CloudAPI {
if decort , ok := c . Provider . ( * decort . DecortClient ) ; ok {
return decort . CloudAPI ( )
}
if bvs , ok := c . Provider . ( * decort . BVSDecortClient ) ; ok {
return bvs . CloudAPI ( )
}
return nil
}
func ( c * Client ) CloudBroker ( ) * cloudbroker . CloudBroker {
if decort , ok := c . Provider . ( * decort . DecortClient ) ; ok {
return decort . CloudBroker ( )
}
if bvs , ok := c . Provider . ( * decort . BVSDecortClient ) ; ok {
return bvs . CloudBroker ( )
}
return nil
}