Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
6e64a63a
Commit
6e64a63a
authored
Aug 07, 2015
by
Kris Rousey
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adding a way to decode to a specified version.
This is largely needed as a way to get a versioned client without requiring everyone to switch to versioned types at once.
parent
213e7a8a
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
49 additions
and
7 deletions
+49
-7
restmapper_test.go
pkg/api/meta/restmapper_test.go
+4
-0
decode.go
pkg/conversion/decode.go
+13
-4
codec.go
pkg/runtime/codec.go
+7
-0
interfaces.go
pkg/runtime/interfaces.go
+1
-0
scheme.go
pkg/runtime/scheme.go
+13
-0
scheme_test.go
pkg/runtime/scheme_test.go
+7
-3
unstructured.go
pkg/runtime/unstructured.go
+4
-0
No files found.
pkg/api/meta/restmapper_test.go
View file @
6e64a63a
...
...
@@ -33,6 +33,10 @@ func (fakeCodec) Decode([]byte) (runtime.Object, error) {
return
nil
,
nil
}
func
(
fakeCodec
)
DecodeToVersion
([]
byte
,
string
)
(
runtime
.
Object
,
error
)
{
return
nil
,
nil
}
func
(
fakeCodec
)
DecodeInto
([]
byte
,
runtime
.
Object
)
error
{
return
nil
}
...
...
pkg/conversion/decode.go
View file @
6e64a63a
...
...
@@ -50,7 +50,16 @@ func (s *Scheme) DecodeToVersionedObject(data []byte) (obj interface{}, version,
// s.InternalVersion type before being returned. Decode will not decode
// objects without version set unless InternalVersion is also "".
func
(
s
*
Scheme
)
Decode
(
data
[]
byte
)
(
interface
{},
error
)
{
obj
,
version
,
kind
,
err
:=
s
.
DecodeToVersionedObject
(
data
)
return
s
.
DecodeToVersion
(
data
,
s
.
InternalVersion
)
}
// DecodeToVersion converts a JSON string back into a pointer to an api object.
// Deduces the type based upon the fields added by the MetaInsertionFactory
// technique. The object will be converted, if necessary, into the versioned
// type before being returned. Decode will not decode objects without version
// set unless version is also "".
func
(
s
*
Scheme
)
DecodeToVersion
(
data
[]
byte
,
version
string
)
(
interface
{},
error
)
{
obj
,
sourceVersion
,
kind
,
err
:=
s
.
DecodeToVersionedObject
(
data
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -60,12 +69,12 @@ func (s *Scheme) Decode(data []byte) (interface{}, error) {
}
// Convert if needed.
if
s
.
InternalVersion
!=
v
ersion
{
objOut
,
err
:=
s
.
NewObject
(
s
.
InternalV
ersion
,
kind
)
if
version
!=
sourceV
ersion
{
objOut
,
err
:=
s
.
NewObject
(
v
ersion
,
kind
)
if
err
!=
nil
{
return
nil
,
err
}
flags
,
meta
:=
s
.
generateConvertMeta
(
version
,
s
.
InternalV
ersion
,
obj
)
flags
,
meta
:=
s
.
generateConvertMeta
(
sourceVersion
,
v
ersion
,
obj
)
if
err
:=
s
.
converter
.
Convert
(
obj
,
objOut
,
flags
,
meta
);
err
!=
nil
{
return
nil
,
err
}
...
...
pkg/runtime/codec.go
View file @
6e64a63a
...
...
@@ -77,3 +77,10 @@ type codecWrapper struct {
func
(
c
*
codecWrapper
)
Encode
(
obj
Object
)
([]
byte
,
error
)
{
return
c
.
EncodeToVersion
(
obj
,
c
.
version
)
}
// TODO: Make this behaviour default when we move everyone away from
// the unversioned types.
//
// func (c *codecWrapper) Decode(data []byte) (Object, error) {
// return c.DecodeToVersion(data, c.version)
// }
pkg/runtime/interfaces.go
View file @
6e64a63a
...
...
@@ -37,6 +37,7 @@ type ObjectCodec interface {
// Decoder defines methods for deserializing API objects into a given type
type
Decoder
interface
{
Decode
(
data
[]
byte
)
(
Object
,
error
)
DecodeToVersion
(
data
[]
byte
,
version
string
)
(
Object
,
error
)
DecodeInto
(
data
[]
byte
,
obj
Object
)
error
DecodeIntoWithSpecifiedVersionKind
(
data
[]
byte
,
obj
Object
,
kind
,
version
string
)
error
}
...
...
pkg/runtime/scheme.go
View file @
6e64a63a
...
...
@@ -446,6 +446,19 @@ func (s *Scheme) Decode(data []byte) (Object, error) {
return
obj
.
(
Object
),
nil
}
// DecodeToVersion converts a YAML or JSON string back into a pointer to an api
// object. Deduces the type based upon the APIVersion and Kind fields, which
// are set by Encode. Only versioned objects (APIVersion != "") are
// accepted. The object will be converted into the in-memory versioned type
// requested before being returned.
func
(
s
*
Scheme
)
DecodeToVersion
(
data
[]
byte
,
version
string
)
(
Object
,
error
)
{
obj
,
err
:=
s
.
raw
.
DecodeToVersion
(
data
,
version
)
if
err
!=
nil
{
return
nil
,
err
}
return
obj
.
(
Object
),
nil
}
// DecodeInto parses a YAML or JSON string and stores it in obj. Returns an error
// if data.Kind is set and doesn't match the type of obj. Obj should be a
// pointer to an api type.
...
...
pkg/runtime/scheme_test.go
View file @
6e64a63a
...
...
@@ -87,14 +87,15 @@ func TestScheme(t *testing.T) {
TestString
:
"foo"
,
}
// Test Encode, Decode,
and DecodeInto
// Test Encode, Decode,
DecodeInto, and DecodeToVersion
obj
:=
runtime
.
Object
(
simple
)
data
,
err
:=
scheme
.
EncodeToVersion
(
obj
,
"externalVersion"
)
obj2
,
err2
:=
scheme
.
Decode
(
data
)
obj3
:=
&
InternalSimple
{}
err3
:=
scheme
.
DecodeInto
(
data
,
obj3
)
if
err
!=
nil
||
err2
!=
nil
{
t
.
Fatalf
(
"Failure: '%v' '%v' '%v'"
,
err
,
err2
,
err3
)
obj4
,
err4
:=
scheme
.
DecodeToVersion
(
data
,
"externalVersion"
)
if
err
!=
nil
||
err2
!=
nil
||
err3
!=
nil
||
err4
!=
nil
{
t
.
Fatalf
(
"Failure: '%v' '%v' '%v' '%v'"
,
err
,
err2
,
err3
,
err4
)
}
if
_
,
ok
:=
obj2
.
(
*
InternalSimple
);
!
ok
{
t
.
Fatalf
(
"Got wrong type"
)
...
...
@@ -105,6 +106,9 @@ func TestScheme(t *testing.T) {
if
e
,
a
:=
simple
,
obj3
;
!
reflect
.
DeepEqual
(
e
,
a
)
{
t
.
Errorf
(
"Expected:
\n
%#v,
\n
Got:
\n
%#v"
,
e
,
a
)
}
if
_
,
ok
:=
obj4
.
(
*
ExternalSimple
);
!
ok
{
t
.
Fatalf
(
"Got wrong type"
)
}
// Test Convert
external
:=
&
ExternalSimple
{}
...
...
pkg/runtime/unstructured.go
View file @
6e64a63a
...
...
@@ -78,6 +78,10 @@ func (unstructuredJSONScheme) DecodeIntoWithSpecifiedVersionKind(data []byte, ob
return
nil
}
func
(
unstructuredJSONScheme
)
DecodeToVersion
(
data
[]
byte
,
version
string
)
(
Object
,
error
)
{
return
nil
,
nil
}
func
(
unstructuredJSONScheme
)
DataVersionAndKind
(
data
[]
byte
)
(
version
,
kind
string
,
err
error
)
{
obj
:=
TypeMeta
{}
if
err
:=
json
.
Unmarshal
(
data
,
&
obj
);
err
!=
nil
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment