package ec2

import ()

type ProviderDecorator struct {
	Inner     Provider
	Decorator func(name string, call func() error) error
}

func (this *ProviderDecorator) CreateSecurityGroup(p0 string, p1 string, p2 string) (v0 *string, err error) {
	call := func() error {
		var err error
		v0, err = this.Inner.CreateSecurityGroup(p0, p1, p2)
		return err
	}
	err = this.Decorator("CreateSecurityGroup", call)
	return v0, err
}
func (this *ProviderDecorator) AuthorizeSecurityGroupIngress(p0 []*SecurityGroupIngress) (err error) {
	call := func() error {
		var err error
		err = this.Inner.AuthorizeSecurityGroupIngress(p0)
		return err
	}
	err = this.Decorator("AuthorizeSecurityGroupIngress", call)
	return err
}
func (this *ProviderDecorator) RevokeSecurityGroupIngress(p0 []*SecurityGroupIngress) (err error) {
	call := func() error {
		var err error
		err = this.Inner.RevokeSecurityGroupIngress(p0)
		return err
	}
	err = this.Decorator("RevokeSecurityGroupIngress", call)
	return err
}
func (this *ProviderDecorator) RevokeSecurityGroupIngressHelper(p0 string, p1 IpPermission) (err error) {
	call := func() error {
		var err error
		err = this.Inner.RevokeSecurityGroupIngressHelper(p0, p1)
		return err
	}
	err = this.Decorator("RevokeSecurityGroupIngressHelper", call)
	return err
}
func (this *ProviderDecorator) AuthorizeSecurityGroupIngressFromGroup(p0 string, p1 string) (err error) {
	call := func() error {
		var err error
		err = this.Inner.AuthorizeSecurityGroupIngressFromGroup(p0, p1)
		return err
	}
	err = this.Decorator("AuthorizeSecurityGroupIngressFromGroup", call)
	return err
}
func (this *ProviderDecorator) DescribeSecurityGroup(p0 string) (v0 *SecurityGroup, err error) {
	call := func() error {
		var err error
		v0, err = this.Inner.DescribeSecurityGroup(p0)
		return err
	}
	err = this.Decorator("DescribeSecurityGroup", call)
	return v0, err
}
func (this *ProviderDecorator) DescribeSubnet(p0 string) (v0 *Subnet, err error) {
	call := func() error {
		var err error
		v0, err = this.Inner.DescribeSubnet(p0)
		return err
	}
	err = this.Decorator("DescribeSubnet", call)
	return v0, err
}
func (this *ProviderDecorator) DeleteSecurityGroup(p0 *SecurityGroup) (err error) {
	call := func() error {
		var err error
		err = this.Inner.DeleteSecurityGroup(p0)
		return err
	}
	err = this.Decorator("DeleteSecurityGroup", call)
	return err
}
func (this *ProviderDecorator) DescribeInstance(p0 string) (v0 *Instance, err error) {
	call := func() error {
		var err error
		v0, err = this.Inner.DescribeInstance(p0)
		return err
	}
	err = this.Decorator("DescribeInstance", call)
	return v0, err
}
func (this *ProviderDecorator) DescribeVPC(p0 string) (v0 *VPC, err error) {
	call := func() error {
		var err error
		v0, err = this.Inner.DescribeVPC(p0)
		return err
	}
	err = this.Decorator("DescribeVPC", call)
	return v0, err
}
func (this *ProviderDecorator) DescribeVPCByName(p0 string) (v0 *VPC, err error) {
	call := func() error {
		var err error
		v0, err = this.Inner.DescribeVPCByName(p0)
		return err
	}
	err = this.Decorator("DescribeVPCByName", call)
	return v0, err
}
func (this *ProviderDecorator) DescribeVPCSubnets(p0 string) (v0 []*Subnet, err error) {
	call := func() error {
		var err error
		v0, err = this.Inner.DescribeVPCSubnets(p0)
		return err
	}
	err = this.Decorator("DescribeVPCSubnets", call)
	return v0, err
}
func (this *ProviderDecorator) DescribeVPCGateways(p0 string) (v0 []*InternetGateway, err error) {
	call := func() error {
		var err error
		v0, err = this.Inner.DescribeVPCGateways(p0)
		return err
	}
	err = this.Decorator("DescribeVPCGateways", call)
	return v0, err
}
func (this *ProviderDecorator) DescribeVPCRoutes(p0 string) (v0 []*RouteTable, err error) {
	call := func() error {
		var err error
		v0, err = this.Inner.DescribeVPCRoutes(p0)
		return err
	}
	err = this.Decorator("DescribeVPCRoutes", call)
	return v0, err
}

