diff --git a/pkg/apis/duck/v1/subscribable_types.go b/pkg/apis/duck/v1/subscribable_types.go index b744334e19c..2cd6fec08c5 100644 --- a/pkg/apis/duck/v1/subscribable_types.go +++ b/pkg/apis/duck/v1/subscribable_types.go @@ -107,6 +107,7 @@ var ( _ apis.Listable = (*Subscribable)(nil) _ apis.Convertible = (*Subscribable)(nil) + _ apis.Convertible = (*SubscribableStatus)(nil) ) // GetFullType implements duck.Implementable diff --git a/pkg/apis/duck/v1/subscribable_types_conversion.go b/pkg/apis/duck/v1/subscribable_types_conversion.go index b61470ddac9..f27a608b840 100644 --- a/pkg/apis/duck/v1/subscribable_types_conversion.go +++ b/pkg/apis/duck/v1/subscribable_types_conversion.go @@ -32,3 +32,13 @@ func (source *Subscribable) ConvertTo(ctx context.Context, sink apis.Convertible func (sink *Subscribable) ConvertFrom(ctx context.Context, source apis.Convertible) error { return fmt.Errorf("v1 is the highest known version, got: %T", source) } + +// ConvertTo implements apis.Convertible +func (source *SubscribableStatus) ConvertTo(ctx context.Context, sink apis.Convertible) error { + return fmt.Errorf("v1 is the highest known version, got: %T", sink) +} + +// ConvertFrom implements apis.Convertible +func (sink *SubscribableStatus) ConvertFrom(ctx context.Context, source apis.Convertible) error { + return fmt.Errorf("v1 is the highest known version, got: %T", source) +} diff --git a/pkg/apis/duck/v1/subscribable_types_conversion_test.go b/pkg/apis/duck/v1/subscribable_types_conversion_test.go index d516391417a..77ef17b9123 100644 --- a/pkg/apis/duck/v1/subscribable_types_conversion_test.go +++ b/pkg/apis/duck/v1/subscribable_types_conversion_test.go @@ -21,7 +21,7 @@ import ( "testing" ) -func TestInMemoryChannelConversionBadType(t *testing.T) { +func TestSubscribableConversionBadType(t *testing.T) { good, bad := &Subscribable{}, &Subscribable{} if err := good.ConvertTo(context.Background(), bad); err == nil { @@ -32,3 +32,15 @@ func TestInMemoryChannelConversionBadType(t *testing.T) { t.Errorf("ConvertFrom() = %#v, wanted error", good) } } + +func TestSubscribableStatusConversionBadType(t *testing.T) { + good, bad := &SubscribableStatus{}, &SubscribableStatus{} + + if err := good.ConvertTo(context.Background(), bad); err == nil { + t.Errorf("ConvertTo() = %#v, wanted error", bad) + } + + if err := good.ConvertFrom(context.Background(), bad); err == nil { + t.Errorf("ConvertFrom() = %#v, wanted error", good) + } +} diff --git a/pkg/apis/duck/v1alpha1/subscribable_types.go b/pkg/apis/duck/v1alpha1/subscribable_types.go index 050695b049a..253ad004ced 100644 --- a/pkg/apis/duck/v1alpha1/subscribable_types.go +++ b/pkg/apis/duck/v1alpha1/subscribable_types.go @@ -107,6 +107,8 @@ var ( _ apis.Listable = (*SubscribableType)(nil) _ apis.Convertible = (*SubscribableType)(nil) + + _ apis.Convertible = (*SubscribableTypeStatus)(nil) ) // GetSubscribableTypeStatus method Returns the Default SubscribableStatus in this case it's SubscribableStatus diff --git a/pkg/apis/duck/v1alpha1/subscribable_types_conversion.go b/pkg/apis/duck/v1alpha1/subscribable_types_conversion.go index 9d5f6ace044..4e07b855d97 100644 --- a/pkg/apis/duck/v1alpha1/subscribable_types_conversion.go +++ b/pkg/apis/duck/v1alpha1/subscribable_types_conversion.go @@ -69,20 +69,26 @@ func (source *SubscriberSpec) ConvertTo(ctx context.Context, sink *duckv1beta1.S } } -// ConvertTo helps implement apis.Convertible -func (source *SubscribableTypeStatus) ConvertTo(ctx context.Context, sink *duckv1beta1.SubscribableStatus) { - if source.SubscribableStatus != nil && - len(source.SubscribableStatus.Subscribers) > 0 { - sink.Subscribers = make([]duckv1beta1.SubscriberStatus, len(source.SubscribableStatus.Subscribers)) - for i, ss := range source.SubscribableStatus.Subscribers { - sink.Subscribers[i] = duckv1beta1.SubscriberStatus{ - UID: ss.UID, - ObservedGeneration: ss.ObservedGeneration, - Ready: ss.Ready, - Message: ss.Message, +// ConvertTo implements apis.Convertible +func (source *SubscribableTypeStatus) ConvertTo(ctx context.Context, obj apis.Convertible) error { + switch sink := obj.(type) { + case *duckv1beta1.SubscribableStatus: + if source.SubscribableStatus != nil && + len(source.SubscribableStatus.Subscribers) > 0 { + sink.Subscribers = make([]duckv1beta1.SubscriberStatus, len(source.SubscribableStatus.Subscribers)) + for i, ss := range source.SubscribableStatus.Subscribers { + sink.Subscribers[i] = duckv1beta1.SubscriberStatus{ + UID: ss.UID, + ObservedGeneration: ss.ObservedGeneration, + Ready: ss.Ready, + Message: ss.Message, + } } } + default: + return fmt.Errorf("unknown version, got: %T", sink) } + return nil } // ConvertFrom implements apis.Convertible. @@ -91,7 +97,7 @@ func (sink *SubscribableType) ConvertFrom(ctx context.Context, obj apis.Converti switch source := obj.(type) { case *duckv1beta1.Subscribable: sink.ObjectMeta = source.ObjectMeta - sink.Status.ConvertFrom(ctx, source.Status) + sink.Status.ConvertFrom(ctx, &source.Status) sink.Spec.ConvertFrom(ctx, source.Spec) return nil default: @@ -126,20 +132,25 @@ func (sink *SubscriberSpec) ConvertFrom(ctx context.Context, source duckv1beta1. } -// ConvertFrom helps implement apis.Convertible -func (sink *SubscribableTypeStatus) ConvertFrom(ctx context.Context, source duckv1beta1.SubscribableStatus) error { - if len(source.Subscribers) > 0 { - sink.SubscribableStatus = &SubscribableStatus{ - Subscribers: make([]duckv1beta1.SubscriberStatus, len(source.Subscribers)), - } - for i, ss := range source.Subscribers { - sink.SubscribableStatus.Subscribers[i] = duckv1beta1.SubscriberStatus{ - UID: ss.UID, - ObservedGeneration: ss.ObservedGeneration, - Ready: ss.Ready, - Message: ss.Message, +// ConvertFrom implements apis.Convertible +func (sink *SubscribableTypeStatus) ConvertFrom(ctx context.Context, obj apis.Convertible) error { + switch source := obj.(type) { + case *duckv1beta1.SubscribableStatus: + if len(source.Subscribers) > 0 { + sink.SubscribableStatus = &SubscribableStatus{ + Subscribers: make([]duckv1beta1.SubscriberStatus, len(source.Subscribers)), + } + for i, ss := range source.Subscribers { + sink.SubscribableStatus.Subscribers[i] = duckv1beta1.SubscriberStatus{ + UID: ss.UID, + ObservedGeneration: ss.ObservedGeneration, + Ready: ss.Ready, + Message: ss.Message, + } } } + default: + return fmt.Errorf("unknown version, got: %T", sink) } return nil } diff --git a/pkg/apis/duck/v1alpha1/subscribable_types_conversion_test.go b/pkg/apis/duck/v1alpha1/subscribable_types_conversion_test.go index 80239f2541e..acb6cbfda77 100644 --- a/pkg/apis/duck/v1alpha1/subscribable_types_conversion_test.go +++ b/pkg/apis/duck/v1alpha1/subscribable_types_conversion_test.go @@ -214,3 +214,15 @@ func TestSubscribableTypeConversionWithV1Beta1(t *testing.T) { } } } + +func TestSubscribableTypeStatusConversionBadType(t *testing.T) { + good, bad := &SubscribableTypeStatus{}, &SubscribableTypeStatus{} + + if err := good.ConvertTo(context.Background(), bad); err == nil { + t.Errorf("ConvertTo() = %#v, wanted error", bad) + } + + if err := good.ConvertFrom(context.Background(), bad); err == nil { + t.Errorf("ConvertFrom() = %#v, wanted error", good) + } +} diff --git a/pkg/apis/duck/v1beta1/subscribable_types.go b/pkg/apis/duck/v1beta1/subscribable_types.go index e99a6be2dd8..884fcae8e64 100644 --- a/pkg/apis/duck/v1beta1/subscribable_types.go +++ b/pkg/apis/duck/v1beta1/subscribable_types.go @@ -107,6 +107,7 @@ var ( _ apis.Listable = (*Subscribable)(nil) _ apis.Convertible = (*Subscribable)(nil) + _ apis.Convertible = (*SubscribableStatus)(nil) ) // GetFullType implements duck.Implementable diff --git a/pkg/apis/duck/v1beta1/subscribable_types_conversion.go b/pkg/apis/duck/v1beta1/subscribable_types_conversion.go index f3fb70ac732..178e8c14192 100644 --- a/pkg/apis/duck/v1beta1/subscribable_types_conversion.go +++ b/pkg/apis/duck/v1beta1/subscribable_types_conversion.go @@ -64,19 +64,25 @@ func (source *SubscriberSpec) ConvertTo(ctx context.Context, sink *eventingduckv return nil } -// ConvertTo helps implement apis.Convertible -func (source *SubscribableStatus) ConvertTo(ctx context.Context, sink *eventingduckv1.SubscribableStatus) { - if len(source.Subscribers) > 0 { - sink.Subscribers = make([]eventingduckv1.SubscriberStatus, len(source.Subscribers)) - for i, ss := range source.Subscribers { - sink.Subscribers[i] = eventingduckv1.SubscriberStatus{ - UID: ss.UID, - ObservedGeneration: ss.ObservedGeneration, - Ready: ss.Ready, - Message: ss.Message, +// ConvertTo implements apis.Convertible +func (source *SubscribableStatus) ConvertTo(ctx context.Context, obj apis.Convertible) error { + switch sink := obj.(type) { + case *eventingduckv1.SubscribableStatus: + if len(source.Subscribers) > 0 { + sink.Subscribers = make([]eventingduckv1.SubscriberStatus, len(source.Subscribers)) + for i, ss := range source.Subscribers { + sink.Subscribers[i] = eventingduckv1.SubscriberStatus{ + UID: ss.UID, + ObservedGeneration: ss.ObservedGeneration, + Ready: ss.Ready, + Message: ss.Message, + } } } + default: + return fmt.Errorf("unknown version, got: %T", sink) } + return nil } // ConvertFrom implements apis.Convertible. @@ -84,7 +90,7 @@ func (sink *Subscribable) ConvertFrom(ctx context.Context, from apis.Convertible switch source := from.(type) { case *eventingduckv1.Subscribable: sink.ObjectMeta = source.ObjectMeta - sink.Status.ConvertFrom(ctx, source.Status) + sink.Status.ConvertFrom(ctx, &source.Status) return sink.Spec.ConvertFrom(ctx, source.Spec) default: return fmt.Errorf("unknown version, got: %T", source) @@ -117,18 +123,23 @@ func (sink *SubscriberSpec) ConvertFrom(ctx context.Context, source eventingduck return nil } -// ConvertFrom helps implement apis.Convertible -func (sink *SubscribableStatus) ConvertFrom(ctx context.Context, source eventingduckv1.SubscribableStatus) error { - if len(source.Subscribers) > 0 { - sink.Subscribers = make([]SubscriberStatus, len(source.Subscribers)) - for i, ss := range source.Subscribers { - sink.Subscribers[i] = SubscriberStatus{ - UID: ss.UID, - ObservedGeneration: ss.ObservedGeneration, - Ready: ss.Ready, - Message: ss.Message, +// ConvertFrom implements apis.Convertible +func (sink *SubscribableStatus) ConvertFrom(ctx context.Context, obj apis.Convertible) error { + switch source := obj.(type) { + case *eventingduckv1.SubscribableStatus: + if len(source.Subscribers) > 0 { + sink.Subscribers = make([]SubscriberStatus, len(source.Subscribers)) + for i, ss := range source.Subscribers { + sink.Subscribers[i] = SubscriberStatus{ + UID: ss.UID, + ObservedGeneration: ss.ObservedGeneration, + Ready: ss.Ready, + Message: ss.Message, + } } } + default: + return fmt.Errorf("unknown version, got: %T", sink) } return nil } diff --git a/pkg/apis/duck/v1beta1/subscribable_types_conversion_test.go b/pkg/apis/duck/v1beta1/subscribable_types_conversion_test.go index 60049aa3938..9fc36a144af 100644 --- a/pkg/apis/duck/v1beta1/subscribable_types_conversion_test.go +++ b/pkg/apis/duck/v1beta1/subscribable_types_conversion_test.go @@ -265,3 +265,15 @@ func TestSubscribableTypeConversionWithV1(t *testing.T) { } } } + +func TestSubscribableStatusConversionBadType(t *testing.T) { + good, bad := &SubscribableStatus{}, &SubscribableStatus{} + + if err := good.ConvertTo(context.Background(), bad); err == nil { + t.Errorf("ConvertTo() = %#v, wanted error", bad) + } + + if err := good.ConvertFrom(context.Background(), bad); err == nil { + t.Errorf("ConvertFrom() = %#v, wanted error", good) + } +} diff --git a/pkg/apis/messaging/v1beta1/channel_conversion.go b/pkg/apis/messaging/v1beta1/channel_conversion.go index c205365c66b..f82ad3bb990 100644 --- a/pkg/apis/messaging/v1beta1/channel_conversion.go +++ b/pkg/apis/messaging/v1beta1/channel_conversion.go @@ -103,6 +103,6 @@ func (sink *ChannelSpec) ConvertFrom(ctx context.Context, source v1.ChannelSpec) func (sink *ChannelStatus) ConvertFrom(ctx context.Context, source v1.ChannelStatus) { source.Status.ConvertTo(ctx, &sink.Status) sink.Channel = source.Channel - sink.SubscribableStatus.ConvertFrom(ctx, source.SubscribableStatus) + sink.SubscribableStatus.ConvertFrom(ctx, &source.SubscribableStatus) sink.AddressStatus.Address = source.AddressStatus.Address } diff --git a/pkg/apis/messaging/v1beta1/in_memory_channel_conversion.go b/pkg/apis/messaging/v1beta1/in_memory_channel_conversion.go index 377abd8411a..c266a79dff2 100644 --- a/pkg/apis/messaging/v1beta1/in_memory_channel_conversion.go +++ b/pkg/apis/messaging/v1beta1/in_memory_channel_conversion.go @@ -100,5 +100,5 @@ func (sink *InMemoryChannelStatus) ConvertFrom(ctx context.Context, source v1.In source.Status.ConvertTo(ctx, &sink.Status) sink.AddressStatus = source.AddressStatus sink.SubscribableStatus = eventingduckv1beta1.SubscribableStatus{} - sink.SubscribableStatus.ConvertFrom(ctx, source.SubscribableStatus) + sink.SubscribableStatus.ConvertFrom(ctx, &source.SubscribableStatus) }