Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 20 additions & 7 deletions pkg/apis/duck/v1alpha1/subscribable_types_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,16 @@ func (source *SubscribableType) ConvertTo(ctx context.Context, obj apis.Converti
switch sink := obj.(type) {
case *duckv1beta1.Subscribable:
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am gonna finally add v1alpha1<>v1 conversions after this PR. Please bear with me.

sink.ObjectMeta = source.ObjectMeta
source.Status.ConvertTo(ctx, &sink.Status)
return source.Spec.ConvertTo(ctx, &sink.Spec)
if err := source.Status.ConvertTo(ctx, &sink.Status); err != nil {
return err
}
if err := source.Spec.ConvertTo(ctx, &sink.Spec); err != nil {
return err
}
default:
return fmt.Errorf("unknown version, got: %T", sink)
}
return nil
}

// ConvertTo implements apis.Convertible
Expand All @@ -46,7 +51,9 @@ func (source *SubscribableTypeSpec) ConvertTo(ctx context.Context, obj apis.Conv
if source.Subscribable != nil {
sink.Subscribers = make([]duckv1beta1.SubscriberSpec, len(source.Subscribable.Subscribers))
for i, s := range source.Subscribable.Subscribers {
s.ConvertTo(ctx, &sink.Subscribers[i])
if err := s.ConvertTo(ctx, &sink.Subscribers[i]); err != nil {
return err
}
}
}
default:
Expand Down Expand Up @@ -109,12 +116,16 @@ 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.Spec.ConvertFrom(ctx, &source.Spec)
return nil
if err := sink.Status.ConvertFrom(ctx, &source.Status); err != nil {
return err
}
if err := sink.Spec.ConvertFrom(ctx, &source.Spec); err != nil {
return err
}
default:
return fmt.Errorf("unknown version, got: %T", source)
}
return nil
}

// ConvertFrom implements apis.Convertible
Expand All @@ -126,7 +137,9 @@ func (sink *SubscribableTypeSpec) ConvertFrom(ctx context.Context, obj apis.Conv
Subscribers: make([]SubscriberSpec, len(source.Subscribers)),
}
for i, s := range source.Subscribers {
sink.Subscribable.Subscribers[i].ConvertFrom(ctx, &s)
if err := sink.Subscribable.Subscribers[i].ConvertFrom(ctx, &s); err != nil {
return err
}
}
}
default:
Expand Down
29 changes: 28 additions & 1 deletion pkg/apis/duck/v1alpha1/subscribable_types_conversion_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,14 @@ func TestSubscribableTypeConversion(t *testing.T) {
BackoffDelay: pointer.StringPtr("5s"),
},
},
{
UID: "uid-2",
Generation: 8,
SubscriberURI: apis.HTTP("subscriber2.example.com"),
ReplyURI: apis.HTTP("reply2.example.com"),
DeadLetterSinkURI: apis.HTTP("subscriber2.dls.example.com"),
Delivery: nil,
},
},
},
},
Expand Down Expand Up @@ -123,7 +131,9 @@ func TestSubscribableTypeConversion(t *testing.T) {
if err := got.ConvertFrom(context.Background(), ver); err != nil {
t.Errorf("ConvertFrom() = %v", err)
}
if diff := cmp.Diff(test.in, got); diff != "" {

fixed := fixSubscribableTypeDeprecated(test.in)
if diff := cmp.Diff(fixed, got); diff != "" {
t.Errorf("roundtrip (-want, +got) = %v", diff)
}
})
Expand Down Expand Up @@ -250,3 +260,20 @@ func TestSubscriberSpecConversionBadType(t *testing.T) {
t.Errorf("ConvertFrom() = %#v, wanted error", good)
}
}

// Since v1beta1 to v1alpha1 is lossy.
func fixSubscribableTypeDeprecated(in *SubscribableType) *SubscribableType {
if in.Spec.Subscribable != nil && len(in.Spec.Subscribable.Subscribers) > 0 {
for i := range in.Spec.Subscribable.Subscribers {
if in.Spec.Subscribable.Subscribers[i].Delivery == nil {
in.Spec.Subscribable.Subscribers[i].Delivery = &v1beta1.DeliverySpec{
DeadLetterSink: &pkgduckv1.Destination{
URI: in.Spec.Subscribable.Subscribers[i].DeadLetterSinkURI,
},
}
}
}
}

return in
}
23 changes: 17 additions & 6 deletions pkg/apis/duck/v1beta1/subscribable_types_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,16 @@ func (source *Subscribable) ConvertTo(ctx context.Context, to apis.Convertible)
switch sink := to.(type) {
case *eventingduckv1.Subscribable:
sink.ObjectMeta = source.ObjectMeta
source.Status.ConvertTo(ctx, &sink.Status)
source.Spec.ConvertTo(ctx, &sink.Spec)
return nil
if err := source.Status.ConvertTo(ctx, &sink.Status); err != nil {
return err
}
if err := source.Spec.ConvertTo(ctx, &sink.Spec); err != nil {
return err
}
default:
return fmt.Errorf("unknown version, got: %T", sink)
}
return nil
}

// ConvertTo helps implement apis.Convertible
Expand All @@ -45,7 +49,9 @@ func (source *SubscribableSpec) ConvertTo(ctx context.Context, obj apis.Converti
if len(source.Subscribers) > 0 {
sink.Subscribers = make([]eventingduckv1.SubscriberSpec, len(source.Subscribers))
for i, s := range source.Subscribers {
s.ConvertTo(ctx, &sink.Subscribers[i])
if err := s.ConvertTo(ctx, &sink.Subscribers[i]); err != nil {
return err
}
}
}
default:
Expand Down Expand Up @@ -112,11 +118,16 @@ 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)
return sink.Spec.ConvertFrom(ctx, &source.Spec)
if err := sink.Status.ConvertFrom(ctx, &source.Status); err != nil {
return err
}
if err := sink.Spec.ConvertFrom(ctx, &source.Spec); err != nil {
return err
}
default:
return fmt.Errorf("unknown version, got: %T", source)
}
return nil
}

// ConvertFrom helps implement apis.Convertible
Expand Down