func (c *WebAuthn) GetCredentialWithParams(v *WebAuthnGetCredentialParams) (*WebAuthnCredential, error) {
	resp, err := gcdmessage.SendCustomReturn(c.target, c.target.GetSendCh(), &gcdmessage.ParamRequest{Id: c.target.GetId(), Method: "WebAuthn.getCredential", Params: v})
	if err != nil {
		return nil, err
	}
	var chromeData struct {
		Result struct {
			Credential *WebAuthnCredential
		}
	}
	if resp == nil {
		return nil, &gcdmessage.ChromeEmptyResponseErr{}
	}
	cerr := &gcdmessage.ChromeErrorResponse{}
	json.Unmarshal(resp.Data, cerr)
	if cerr != nil && cerr.Error != nil {
		return nil, &gcdmessage.ChromeRequestErr{Resp: cerr}
	}
	if err := json.Unmarshal(resp.Data, &chromeData); err != nil {
		return nil, err
	}
	return chromeData.Result.Credential, nil
}
GetCredentialWithParams - Returns a single credential stored in the given virtual authenticator that matches the credential ID.
Returns -  credential -
package gcdapi
import (
	"github.com/wirepair/gcd/gcdmessage"
)
type WebAuthnVirtualAuthenticatorOptions struct {
	Protocol                    string `json:"protocol"`                               
	Transport                   string `json:"transport"`                              
	HasResidentKey              bool   `json:"hasResidentKey,omitempty"`               
	HasUserVerification         bool   `json:"hasUserVerification,omitempty"`          
	AutomaticPresenceSimulation bool   `json:"automaticPresenceSimulation,omitempty"`  
	IsUserVerified              bool   `json:"isUserVerified,omitempty"`               
}
type WebAuthnCredential struct {
	CredentialId         string `json:"credentialId"`          
	IsResidentCredential bool   `json:"isResidentCredential"`  
	RpId                 string `json:"rpId,omitempty"`        
	PrivateKey           string `json:"privateKey"`            
	UserHandle           string `json:"userHandle,omitempty"`  
	SignCount            int    `json:"signCount"`             
}
type WebAuthn struct {
	target gcdmessage.ChromeTargeter
}
func NewWebAuthn(target gcdmessage.ChromeTargeter) *WebAuthn {
	c := &WebAuthn{target: target}
	return c
}
func (c *WebAuthn) Enable() (*gcdmessage.ChromeResponse, error) {
	return gcdmessage.SendDefaultRequest(c.target, c.target.GetSendCh(), &gcdmessage.ParamRequest{Id: c.target.GetId(), Method: "WebAuthn.enable"})
}
func (c *WebAuthn) Disable() (*gcdmessage.ChromeResponse, error) {
	return gcdmessage.SendDefaultRequest(c.target, c.target.GetSendCh(), &gcdmessage.ParamRequest{Id: c.target.GetId(), Method: "WebAuthn.disable"})
}
type WebAuthnAddVirtualAuthenticatorParams struct {
	Options *WebAuthnVirtualAuthenticatorOptions `json:"options"`
}
func (c *WebAuthn) AddVirtualAuthenticatorWithParams(v *WebAuthnAddVirtualAuthenticatorParams) (string, error) {
	resp, err := gcdmessage.SendCustomReturn(c.target, c.target.GetSendCh(), &gcdmessage.ParamRequest{Id: c.target.GetId(), Method: "WebAuthn.addVirtualAuthenticator", Params: v})
	if err != nil {
		return "", err
	}
	var chromeData struct {
		Result struct {
			AuthenticatorId string
		}
	}
	if resp == nil {
		return "", &gcdmessage.ChromeEmptyResponseErr{}
	}
	cerr := &gcdmessage.ChromeErrorResponse{}
	json.Unmarshal(resp.Data, cerr)
	if cerr != nil && cerr.Error != nil {
		return "", &gcdmessage.ChromeRequestErr{Resp: cerr}
	}
	if err := json.Unmarshal(resp.Data, &chromeData); err != nil {
		return "", err
	}
	return chromeData.Result.AuthenticatorId, nil
}
func (c *WebAuthn) AddVirtualAuthenticator(options *WebAuthnVirtualAuthenticatorOptions) (string, error) {
	var v WebAuthnAddVirtualAuthenticatorParams
	v.Options = options
	return c.AddVirtualAuthenticatorWithParams(&v)
}
type WebAuthnRemoveVirtualAuthenticatorParams struct {
	AuthenticatorId string `json:"authenticatorId"`
}
func (c *WebAuthn) RemoveVirtualAuthenticatorWithParams(v *WebAuthnRemoveVirtualAuthenticatorParams) (*gcdmessage.ChromeResponse, error) {
	return gcdmessage.SendDefaultRequest(c.target, c.target.GetSendCh(), &gcdmessage.ParamRequest{Id: c.target.GetId(), Method: "WebAuthn.removeVirtualAuthenticator", Params: v})
}
func (c *WebAuthn) RemoveVirtualAuthenticator(authenticatorId string) (*gcdmessage.ChromeResponse, error) {
	var v WebAuthnRemoveVirtualAuthenticatorParams
	v.AuthenticatorId = authenticatorId
	return c.RemoveVirtualAuthenticatorWithParams(&v)
}
type WebAuthnAddCredentialParams struct {
	AuthenticatorId string `json:"authenticatorId"`
	Credential *WebAuthnCredential `json:"credential"`
}
func (c *WebAuthn) AddCredentialWithParams(v *WebAuthnAddCredentialParams) (*gcdmessage.ChromeResponse, error) {
	return gcdmessage.SendDefaultRequest(c.target, c.target.GetSendCh(), &gcdmessage.ParamRequest{Id: c.target.GetId(), Method: "WebAuthn.addCredential", Params: v})
}
func (c *WebAuthn) AddCredential(authenticatorId string, credential *WebAuthnCredential) (*gcdmessage.ChromeResponse, error) {
	var v WebAuthnAddCredentialParams
	v.AuthenticatorId = authenticatorId
	v.Credential = credential
	return c.AddCredentialWithParams(&v)
}
type WebAuthnGetCredentialParams struct {
	AuthenticatorId string `json:"authenticatorId"`
	CredentialId string `json:"credentialId"`
}