github.com/TrueCloudLab/frostfs-api-go/v2@v2.0.0-20230228134343-196241c4e79a/session/convert.go (about)

     1  package session
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/TrueCloudLab/frostfs-api-go/v2/acl"
     7  	aclGRPC "github.com/TrueCloudLab/frostfs-api-go/v2/acl/grpc"
     8  	"github.com/TrueCloudLab/frostfs-api-go/v2/refs"
     9  	refsGRPC "github.com/TrueCloudLab/frostfs-api-go/v2/refs/grpc"
    10  	"github.com/TrueCloudLab/frostfs-api-go/v2/rpc/grpc"
    11  	"github.com/TrueCloudLab/frostfs-api-go/v2/rpc/message"
    12  	session "github.com/TrueCloudLab/frostfs-api-go/v2/session/grpc"
    13  	"github.com/TrueCloudLab/frostfs-api-go/v2/status"
    14  	statusGRPC "github.com/TrueCloudLab/frostfs-api-go/v2/status/grpc"
    15  )
    16  
    17  func (c *CreateRequestBody) ToGRPCMessage() grpc.Message {
    18  	var m *session.CreateRequest_Body
    19  
    20  	if c != nil {
    21  		m = new(session.CreateRequest_Body)
    22  
    23  		m.SetOwnerId(c.ownerID.ToGRPCMessage().(*refsGRPC.OwnerID))
    24  		m.SetExpiration(c.expiration)
    25  	}
    26  
    27  	return m
    28  }
    29  
    30  func (c *CreateRequestBody) FromGRPCMessage(m grpc.Message) error {
    31  	v, ok := m.(*session.CreateRequest_Body)
    32  	if !ok {
    33  		return message.NewUnexpectedMessageType(m, v)
    34  	}
    35  
    36  	var err error
    37  
    38  	ownerID := v.GetOwnerId()
    39  	if ownerID == nil {
    40  		c.ownerID = nil
    41  	} else {
    42  		if c.ownerID == nil {
    43  			c.ownerID = new(refs.OwnerID)
    44  		}
    45  
    46  		err = c.ownerID.FromGRPCMessage(ownerID)
    47  		if err != nil {
    48  			return err
    49  		}
    50  	}
    51  
    52  	c.expiration = v.GetExpiration()
    53  
    54  	return nil
    55  }
    56  
    57  func (c *CreateRequest) ToGRPCMessage() grpc.Message {
    58  	var m *session.CreateRequest
    59  
    60  	if c != nil {
    61  		m = new(session.CreateRequest)
    62  
    63  		m.SetBody(c.body.ToGRPCMessage().(*session.CreateRequest_Body))
    64  		c.RequestHeaders.ToMessage(m)
    65  	}
    66  
    67  	return m
    68  }
    69  
    70  func (c *CreateRequest) FromGRPCMessage(m grpc.Message) error {
    71  	v, ok := m.(*session.CreateRequest)
    72  	if !ok {
    73  		return message.NewUnexpectedMessageType(m, v)
    74  	}
    75  
    76  	var err error
    77  
    78  	body := v.GetBody()
    79  	if body == nil {
    80  		c.body = nil
    81  	} else {
    82  		if c.body == nil {
    83  			c.body = new(CreateRequestBody)
    84  		}
    85  
    86  		err = c.body.FromGRPCMessage(body)
    87  		if err != nil {
    88  			return err
    89  		}
    90  	}
    91  
    92  	return c.RequestHeaders.FromMessage(v)
    93  }
    94  
    95  func (c *CreateResponseBody) ToGRPCMessage() grpc.Message {
    96  	var m *session.CreateResponse_Body
    97  
    98  	if c != nil {
    99  		m = new(session.CreateResponse_Body)
   100  
   101  		m.SetSessionKey(c.sessionKey)
   102  		m.SetId(c.id)
   103  	}
   104  
   105  	return m
   106  }
   107  
   108  func (c *CreateResponseBody) FromGRPCMessage(m grpc.Message) error {
   109  	v, ok := m.(*session.CreateResponse_Body)
   110  	if !ok {
   111  		return message.NewUnexpectedMessageType(m, v)
   112  	}
   113  
   114  	c.sessionKey = v.GetSessionKey()
   115  	c.id = v.GetId()
   116  
   117  	return nil
   118  }
   119  
   120  func (c *CreateResponse) ToGRPCMessage() grpc.Message {
   121  	var m *session.CreateResponse
   122  
   123  	if c != nil {
   124  		m = new(session.CreateResponse)
   125  
   126  		m.SetBody(c.body.ToGRPCMessage().(*session.CreateResponse_Body))
   127  		c.ResponseHeaders.ToMessage(m)
   128  	}
   129  
   130  	return m
   131  }
   132  
   133  func (c *CreateResponse) FromGRPCMessage(m grpc.Message) error {
   134  	v, ok := m.(*session.CreateResponse)
   135  	if !ok {
   136  		return message.NewUnexpectedMessageType(m, v)
   137  	}
   138  
   139  	var err error
   140  
   141  	body := v.GetBody()
   142  	if body == nil {
   143  		c.body = nil
   144  	} else {
   145  		if c.body == nil {
   146  			c.body = new(CreateResponseBody)
   147  		}
   148  
   149  		err = c.body.FromGRPCMessage(body)
   150  		if err != nil {
   151  			return err
   152  		}
   153  	}
   154  
   155  	return c.ResponseHeaders.FromMessage(v)
   156  }
   157  
   158  func (l *TokenLifetime) ToGRPCMessage() grpc.Message {
   159  	var m *session.SessionToken_Body_TokenLifetime
   160  
   161  	if l != nil {
   162  		m = new(session.SessionToken_Body_TokenLifetime)
   163  
   164  		m.SetExp(l.exp)
   165  		m.SetIat(l.iat)
   166  		m.SetNbf(l.nbf)
   167  	}
   168  
   169  	return m
   170  }
   171  
   172  func (l *TokenLifetime) FromGRPCMessage(m grpc.Message) error {
   173  	v, ok := m.(*session.SessionToken_Body_TokenLifetime)
   174  	if !ok {
   175  		return message.NewUnexpectedMessageType(m, v)
   176  	}
   177  
   178  	l.exp = v.GetExp()
   179  	l.iat = v.GetIat()
   180  	l.nbf = v.GetNbf()
   181  
   182  	return nil
   183  }
   184  
   185  func (x *XHeader) ToGRPCMessage() grpc.Message {
   186  	var m *session.XHeader
   187  
   188  	if x != nil {
   189  		m = new(session.XHeader)
   190  
   191  		m.SetKey(x.key)
   192  		m.SetValue(x.val)
   193  	}
   194  
   195  	return m
   196  }
   197  
   198  func (x *XHeader) FromGRPCMessage(m grpc.Message) error {
   199  	v, ok := m.(*session.XHeader)
   200  	if !ok {
   201  		return message.NewUnexpectedMessageType(m, v)
   202  	}
   203  
   204  	x.key = v.GetKey()
   205  	x.val = v.GetValue()
   206  
   207  	return nil
   208  }
   209  
   210  func XHeadersToGRPC(xs []XHeader) (res []*session.XHeader) {
   211  	if xs != nil {
   212  		res = make([]*session.XHeader, 0, len(xs))
   213  
   214  		for i := range xs {
   215  			res = append(res, xs[i].ToGRPCMessage().(*session.XHeader))
   216  		}
   217  	}
   218  
   219  	return
   220  }
   221  
   222  func XHeadersFromGRPC(xs []*session.XHeader) (res []XHeader, err error) {
   223  	if xs != nil {
   224  		res = make([]XHeader, len(xs))
   225  
   226  		for i := range xs {
   227  			if xs[i] != nil {
   228  				err = res[i].FromGRPCMessage(xs[i])
   229  				if err != nil {
   230  					return
   231  				}
   232  			}
   233  		}
   234  	}
   235  
   236  	return
   237  }
   238  
   239  func (t *Token) ToGRPCMessage() grpc.Message {
   240  	var m *session.SessionToken
   241  
   242  	if t != nil {
   243  		m = new(session.SessionToken)
   244  
   245  		m.SetBody(t.body.ToGRPCMessage().(*session.SessionToken_Body))
   246  		m.SetSignature(t.sig.ToGRPCMessage().(*refsGRPC.Signature))
   247  	}
   248  
   249  	return m
   250  }
   251  
   252  func (t *Token) FromGRPCMessage(m grpc.Message) error {
   253  	v, ok := m.(*session.SessionToken)
   254  	if !ok {
   255  		return message.NewUnexpectedMessageType(m, v)
   256  	}
   257  
   258  	var err error
   259  
   260  	body := v.GetBody()
   261  	if body == nil {
   262  		t.body = nil
   263  	} else {
   264  		if t.body == nil {
   265  			t.body = new(TokenBody)
   266  		}
   267  
   268  		err = t.body.FromGRPCMessage(body)
   269  		if err != nil {
   270  			return err
   271  		}
   272  	}
   273  
   274  	sig := v.GetSignature()
   275  	if sig == nil {
   276  		t.sig = nil
   277  	} else {
   278  		if t.sig == nil {
   279  			t.sig = new(refs.Signature)
   280  		}
   281  
   282  		err = t.sig.FromGRPCMessage(sig)
   283  		if err != nil {
   284  			return err
   285  		}
   286  	}
   287  
   288  	return nil
   289  }
   290  
   291  func (r *RequestVerificationHeader) ToGRPCMessage() grpc.Message {
   292  	var m *session.RequestVerificationHeader
   293  
   294  	if r != nil {
   295  		m = new(session.RequestVerificationHeader)
   296  
   297  		m.SetBodySignature(r.bodySig.ToGRPCMessage().(*refsGRPC.Signature))
   298  		m.SetMetaSignature(r.metaSig.ToGRPCMessage().(*refsGRPC.Signature))
   299  		m.SetOriginSignature(r.originSig.ToGRPCMessage().(*refsGRPC.Signature))
   300  		m.SetOrigin(r.origin.ToGRPCMessage().(*session.RequestVerificationHeader))
   301  	}
   302  
   303  	return m
   304  }
   305  
   306  func (r *RequestVerificationHeader) FromGRPCMessage(m grpc.Message) error {
   307  	v, ok := m.(*session.RequestVerificationHeader)
   308  	if !ok {
   309  		return message.NewUnexpectedMessageType(m, v)
   310  	}
   311  
   312  	var err error
   313  
   314  	originSig := v.GetOriginSignature()
   315  	if originSig == nil {
   316  		r.originSig = nil
   317  	} else {
   318  		if r.originSig == nil {
   319  			r.originSig = new(refs.Signature)
   320  		}
   321  
   322  		err = r.originSig.FromGRPCMessage(originSig)
   323  		if err != nil {
   324  			return err
   325  		}
   326  	}
   327  
   328  	metaSig := v.GetMetaSignature()
   329  	if metaSig == nil {
   330  		r.metaSig = nil
   331  	} else {
   332  		if r.metaSig == nil {
   333  			r.metaSig = new(refs.Signature)
   334  		}
   335  
   336  		err = r.metaSig.FromGRPCMessage(metaSig)
   337  		if err != nil {
   338  			return err
   339  		}
   340  	}
   341  
   342  	bodySig := v.GetBodySignature()
   343  	if bodySig == nil {
   344  		r.bodySig = nil
   345  	} else {
   346  		if r.bodySig == nil {
   347  			r.bodySig = new(refs.Signature)
   348  		}
   349  
   350  		err = r.bodySig.FromGRPCMessage(bodySig)
   351  		if err != nil {
   352  			return err
   353  		}
   354  	}
   355  
   356  	origin := v.GetOrigin()
   357  	if origin == nil {
   358  		r.origin = nil
   359  	} else {
   360  		if r.origin == nil {
   361  			r.origin = new(RequestVerificationHeader)
   362  		}
   363  
   364  		err = r.origin.FromGRPCMessage(origin)
   365  		if err != nil {
   366  			return err
   367  		}
   368  	}
   369  
   370  	return nil
   371  }
   372  
   373  func (r *RequestMetaHeader) ToGRPCMessage() grpc.Message {
   374  	var m *session.RequestMetaHeader
   375  
   376  	if r != nil {
   377  		m = new(session.RequestMetaHeader)
   378  
   379  		m.SetVersion(r.version.ToGRPCMessage().(*refsGRPC.Version))
   380  		m.SetSessionToken(r.sessionToken.ToGRPCMessage().(*session.SessionToken))
   381  		m.SetBearerToken(r.bearerToken.ToGRPCMessage().(*aclGRPC.BearerToken))
   382  		m.SetXHeaders(XHeadersToGRPC(r.xHeaders))
   383  		m.SetEpoch(r.epoch)
   384  		m.SetTtl(r.ttl)
   385  		m.SetOrigin(r.origin.ToGRPCMessage().(*session.RequestMetaHeader))
   386  		m.SetNetworkMagic(r.netMagic)
   387  	}
   388  
   389  	return m
   390  }
   391  
   392  func (r *RequestMetaHeader) FromGRPCMessage(m grpc.Message) error {
   393  	v, ok := m.(*session.RequestMetaHeader)
   394  	if !ok {
   395  		return message.NewUnexpectedMessageType(m, v)
   396  	}
   397  
   398  	var err error
   399  
   400  	version := v.GetVersion()
   401  	if version == nil {
   402  		r.version = nil
   403  	} else {
   404  		if r.version == nil {
   405  			r.version = new(refs.Version)
   406  		}
   407  
   408  		err = r.version.FromGRPCMessage(version)
   409  		if err != nil {
   410  			return err
   411  		}
   412  	}
   413  
   414  	sessionToken := v.GetSessionToken()
   415  	if sessionToken == nil {
   416  		r.sessionToken = nil
   417  	} else {
   418  		if r.sessionToken == nil {
   419  			r.sessionToken = new(Token)
   420  		}
   421  
   422  		err = r.sessionToken.FromGRPCMessage(sessionToken)
   423  		if err != nil {
   424  			return err
   425  		}
   426  	}
   427  
   428  	bearerToken := v.GetBearerToken()
   429  	if bearerToken == nil {
   430  		r.bearerToken = nil
   431  	} else {
   432  		if r.bearerToken == nil {
   433  			r.bearerToken = new(acl.BearerToken)
   434  		}
   435  
   436  		err = r.bearerToken.FromGRPCMessage(bearerToken)
   437  		if err != nil {
   438  			return err
   439  		}
   440  	}
   441  
   442  	origin := v.GetOrigin()
   443  	if origin == nil {
   444  		r.origin = nil
   445  	} else {
   446  		if r.origin == nil {
   447  			r.origin = new(RequestMetaHeader)
   448  		}
   449  
   450  		err = r.origin.FromGRPCMessage(origin)
   451  		if err != nil {
   452  			return err
   453  		}
   454  	}
   455  
   456  	r.xHeaders, err = XHeadersFromGRPC(v.GetXHeaders())
   457  	if err != nil {
   458  		return err
   459  	}
   460  
   461  	r.epoch = v.GetEpoch()
   462  	r.ttl = v.GetTtl()
   463  	r.netMagic = v.GetNetworkMagic()
   464  
   465  	return nil
   466  }
   467  
   468  func (r *ResponseVerificationHeader) ToGRPCMessage() grpc.Message {
   469  	var m *session.ResponseVerificationHeader
   470  
   471  	if r != nil {
   472  		m = new(session.ResponseVerificationHeader)
   473  
   474  		m.SetBodySignature(r.bodySig.ToGRPCMessage().(*refsGRPC.Signature))
   475  		m.SetMetaSignature(r.metaSig.ToGRPCMessage().(*refsGRPC.Signature))
   476  		m.SetOriginSignature(r.originSig.ToGRPCMessage().(*refsGRPC.Signature))
   477  		m.SetOrigin(r.origin.ToGRPCMessage().(*session.ResponseVerificationHeader))
   478  	}
   479  
   480  	return m
   481  }
   482  
   483  func (r *ResponseVerificationHeader) FromGRPCMessage(m grpc.Message) error {
   484  	v, ok := m.(*session.ResponseVerificationHeader)
   485  	if !ok {
   486  		return message.NewUnexpectedMessageType(m, v)
   487  	}
   488  
   489  	var err error
   490  
   491  	originSig := v.GetOriginSignature()
   492  	if originSig == nil {
   493  		r.originSig = nil
   494  	} else {
   495  		if r.originSig == nil {
   496  			r.originSig = new(refs.Signature)
   497  		}
   498  
   499  		err = r.originSig.FromGRPCMessage(originSig)
   500  		if err != nil {
   501  			return err
   502  		}
   503  	}
   504  
   505  	metaSig := v.GetMetaSignature()
   506  	if metaSig == nil {
   507  		r.metaSig = nil
   508  	} else {
   509  		if r.metaSig == nil {
   510  			r.metaSig = new(refs.Signature)
   511  		}
   512  
   513  		err = r.metaSig.FromGRPCMessage(metaSig)
   514  		if err != nil {
   515  			return err
   516  		}
   517  	}
   518  
   519  	bodySig := v.GetBodySignature()
   520  	if bodySig == nil {
   521  		r.bodySig = nil
   522  	} else {
   523  		if r.bodySig == nil {
   524  			r.bodySig = new(refs.Signature)
   525  		}
   526  
   527  		err = r.bodySig.FromGRPCMessage(bodySig)
   528  		if err != nil {
   529  			return err
   530  		}
   531  	}
   532  
   533  	origin := v.GetOrigin()
   534  	if origin == nil {
   535  		r.origin = nil
   536  	} else {
   537  		if r.origin == nil {
   538  			r.origin = new(ResponseVerificationHeader)
   539  		}
   540  
   541  		err = r.origin.FromGRPCMessage(origin)
   542  		if err != nil {
   543  			return err
   544  		}
   545  	}
   546  
   547  	return nil
   548  }
   549  
   550  func (r *ResponseMetaHeader) ToGRPCMessage() grpc.Message {
   551  	var m *session.ResponseMetaHeader
   552  
   553  	if r != nil {
   554  		m = new(session.ResponseMetaHeader)
   555  
   556  		m.SetVersion(r.version.ToGRPCMessage().(*refsGRPC.Version))
   557  		m.SetXHeaders(XHeadersToGRPC(r.xHeaders))
   558  		m.SetEpoch(r.epoch)
   559  		m.SetTtl(r.ttl)
   560  		m.SetOrigin(r.origin.ToGRPCMessage().(*session.ResponseMetaHeader))
   561  		m.SetStatus(r.status.ToGRPCMessage().(*statusGRPC.Status))
   562  	}
   563  
   564  	return m
   565  }
   566  
   567  func (r *ResponseMetaHeader) FromGRPCMessage(m grpc.Message) error {
   568  	v, ok := m.(*session.ResponseMetaHeader)
   569  	if !ok {
   570  		return message.NewUnexpectedMessageType(m, v)
   571  	}
   572  
   573  	var err error
   574  
   575  	version := v.GetVersion()
   576  	if version == nil {
   577  		r.version = nil
   578  	} else {
   579  		if r.version == nil {
   580  			r.version = new(refs.Version)
   581  		}
   582  
   583  		err = r.version.FromGRPCMessage(version)
   584  		if err != nil {
   585  			return err
   586  		}
   587  	}
   588  
   589  	origin := v.GetOrigin()
   590  	if origin == nil {
   591  		r.origin = nil
   592  	} else {
   593  		if r.origin == nil {
   594  			r.origin = new(ResponseMetaHeader)
   595  		}
   596  
   597  		err = r.origin.FromGRPCMessage(origin)
   598  		if err != nil {
   599  			return err
   600  		}
   601  	}
   602  
   603  	st := v.GetStatus()
   604  	if st == nil {
   605  		r.status = nil
   606  	} else {
   607  		if r.status == nil {
   608  			r.status = new(status.Status)
   609  		}
   610  
   611  		err = r.status.FromGRPCMessage(st)
   612  		if err != nil {
   613  			return err
   614  		}
   615  	}
   616  
   617  	r.xHeaders, err = XHeadersFromGRPC(v.GetXHeaders())
   618  	if err != nil {
   619  		return err
   620  	}
   621  
   622  	r.epoch = v.GetEpoch()
   623  	r.ttl = v.GetTtl()
   624  
   625  	return nil
   626  }
   627  
   628  func ObjectSessionVerbToGRPCField(v ObjectSessionVerb) session.ObjectSessionContext_Verb {
   629  	switch v {
   630  	case ObjectVerbPut:
   631  		return session.ObjectSessionContext_PUT
   632  	case ObjectVerbGet:
   633  		return session.ObjectSessionContext_GET
   634  	case ObjectVerbHead:
   635  		return session.ObjectSessionContext_HEAD
   636  	case ObjectVerbSearch:
   637  		return session.ObjectSessionContext_SEARCH
   638  	case ObjectVerbDelete:
   639  		return session.ObjectSessionContext_DELETE
   640  	case ObjectVerbRange:
   641  		return session.ObjectSessionContext_RANGE
   642  	case ObjectVerbRangeHash:
   643  		return session.ObjectSessionContext_RANGEHASH
   644  	default:
   645  		return session.ObjectSessionContext_VERB_UNSPECIFIED
   646  	}
   647  }
   648  
   649  func ObjectSessionVerbFromGRPCField(v session.ObjectSessionContext_Verb) ObjectSessionVerb {
   650  	switch v {
   651  	case session.ObjectSessionContext_PUT:
   652  		return ObjectVerbPut
   653  	case session.ObjectSessionContext_GET:
   654  		return ObjectVerbGet
   655  	case session.ObjectSessionContext_HEAD:
   656  		return ObjectVerbHead
   657  	case session.ObjectSessionContext_SEARCH:
   658  		return ObjectVerbSearch
   659  	case session.ObjectSessionContext_DELETE:
   660  		return ObjectVerbDelete
   661  	case session.ObjectSessionContext_RANGE:
   662  		return ObjectVerbRange
   663  	case session.ObjectSessionContext_RANGEHASH:
   664  		return ObjectVerbRangeHash
   665  	default:
   666  		return ObjectVerbUnknown
   667  	}
   668  }
   669  
   670  func (c *ObjectSessionContext) ToGRPCMessage() grpc.Message {
   671  	var m *session.ObjectSessionContext
   672  
   673  	if c != nil {
   674  		m = new(session.ObjectSessionContext)
   675  
   676  		m.SetVerb(ObjectSessionVerbToGRPCField(c.verb))
   677  		m.SetTarget(c.cnr.ToGRPCMessage().(*refsGRPC.ContainerID), refs.ObjectIDListToGRPCMessage(c.objs))
   678  	}
   679  
   680  	return m
   681  }
   682  
   683  func (c *ObjectSessionContext) FromGRPCMessage(m grpc.Message) error {
   684  	v, ok := m.(*session.ObjectSessionContext)
   685  	if !ok {
   686  		return message.NewUnexpectedMessageType(m, v)
   687  	}
   688  
   689  	var err error
   690  
   691  	cnr := v.GetTarget().GetContainer()
   692  	if cnr == nil {
   693  		c.cnr = nil
   694  	} else {
   695  		if c.cnr == nil {
   696  			c.cnr = new(refs.ContainerID)
   697  		}
   698  
   699  		err = c.cnr.FromGRPCMessage(cnr)
   700  		if err != nil {
   701  			return err
   702  		}
   703  	}
   704  
   705  	c.objs, err = refs.ObjectIDListFromGRPCMessage(v.GetTarget().GetObjects())
   706  	if err != nil {
   707  		return err
   708  	}
   709  
   710  	c.verb = ObjectSessionVerbFromGRPCField(v.GetVerb())
   711  
   712  	return nil
   713  }
   714  
   715  func (t *TokenBody) ToGRPCMessage() grpc.Message {
   716  	var m *session.SessionToken_Body
   717  
   718  	if t != nil {
   719  		m = new(session.SessionToken_Body)
   720  
   721  		switch typ := t.ctx.(type) {
   722  		default:
   723  			panic(fmt.Sprintf("unknown session context %T", typ))
   724  		case nil:
   725  			m.Context = nil
   726  		case *ObjectSessionContext:
   727  			m.SetObjectSessionContext(typ.ToGRPCMessage().(*session.ObjectSessionContext))
   728  		case *ContainerSessionContext:
   729  			m.SetContainerSessionContext(typ.ToGRPCMessage().(*session.ContainerSessionContext))
   730  		}
   731  
   732  		m.SetOwnerId(t.ownerID.ToGRPCMessage().(*refsGRPC.OwnerID))
   733  		m.SetId(t.id)
   734  		m.SetSessionKey(t.sessionKey)
   735  		m.SetLifetime(t.lifetime.ToGRPCMessage().(*session.SessionToken_Body_TokenLifetime))
   736  	}
   737  
   738  	return m
   739  }
   740  
   741  func (t *TokenBody) FromGRPCMessage(m grpc.Message) error {
   742  	v, ok := m.(*session.SessionToken_Body)
   743  	if !ok {
   744  		return message.NewUnexpectedMessageType(m, v)
   745  	}
   746  
   747  	var err error
   748  
   749  	t.ctx = nil
   750  
   751  	switch val := v.GetContext().(type) {
   752  	default:
   753  		err = fmt.Errorf("unknown session context %T", val)
   754  	case nil:
   755  	case *session.SessionToken_Body_Object:
   756  		ctx, ok := t.ctx.(*ObjectSessionContext)
   757  		if !ok {
   758  			ctx = new(ObjectSessionContext)
   759  			t.ctx = ctx
   760  		}
   761  
   762  		err = ctx.FromGRPCMessage(val.Object)
   763  	case *session.SessionToken_Body_Container:
   764  		ctx, ok := t.ctx.(*ContainerSessionContext)
   765  		if !ok {
   766  			ctx = new(ContainerSessionContext)
   767  			t.ctx = ctx
   768  		}
   769  
   770  		err = ctx.FromGRPCMessage(val.Container)
   771  	}
   772  
   773  	if err != nil {
   774  		return err
   775  	}
   776  
   777  	ownerID := v.GetOwnerId()
   778  	if ownerID == nil {
   779  		t.ownerID = nil
   780  	} else {
   781  		if t.ownerID == nil {
   782  			t.ownerID = new(refs.OwnerID)
   783  		}
   784  
   785  		err = t.ownerID.FromGRPCMessage(ownerID)
   786  		if err != nil {
   787  			return err
   788  		}
   789  	}
   790  
   791  	lifetime := v.GetLifetime()
   792  	if lifetime == nil {
   793  		t.lifetime = nil
   794  	} else {
   795  		if t.lifetime == nil {
   796  			t.lifetime = new(TokenLifetime)
   797  		}
   798  
   799  		err = t.lifetime.FromGRPCMessage(lifetime)
   800  		if err != nil {
   801  			return err
   802  		}
   803  	}
   804  
   805  	t.id = v.GetId()
   806  	t.sessionKey = v.GetSessionKey()
   807  
   808  	return nil
   809  }
   810  
   811  // ContainerSessionVerbToGRPCField converts ContainerSessionVerb
   812  // to gRPC-generated session.ContainerSessionContext_Verb.
   813  //
   814  // If v is outside of the ContainerSessionVerb enum,
   815  // session.ContainerSessionContext_VERB_UNSPECIFIED is returned.
   816  func ContainerSessionVerbToGRPCField(v ContainerSessionVerb) session.ContainerSessionContext_Verb {
   817  	switch v {
   818  	default:
   819  		return session.ContainerSessionContext_VERB_UNSPECIFIED
   820  	case ContainerVerbPut:
   821  		return session.ContainerSessionContext_PUT
   822  	case ContainerVerbDelete:
   823  		return session.ContainerSessionContext_DELETE
   824  	case ContainerVerbSetEACL:
   825  		return session.ContainerSessionContext_SETEACL
   826  	}
   827  }
   828  
   829  // ContainerSessionVerbFromGRPCField converts gRPC-generated
   830  // session.ContainerSessionContext_Verb to ContainerSessionVerb.
   831  //
   832  // If v is outside of the session.ContainerSessionContext_Verb enum,
   833  // ContainerVerbUnknown is returned.
   834  func ContainerSessionVerbFromGRPCField(v session.ContainerSessionContext_Verb) ContainerSessionVerb {
   835  	switch v {
   836  	default:
   837  		return ContainerVerbUnknown
   838  	case session.ContainerSessionContext_PUT:
   839  		return ContainerVerbPut
   840  	case session.ContainerSessionContext_DELETE:
   841  		return ContainerVerbDelete
   842  	case session.ContainerSessionContext_SETEACL:
   843  		return ContainerVerbSetEACL
   844  	}
   845  }
   846  
   847  // ToGRPCMessage converts ContainerSessionContext to gRPC-generated
   848  // session.ContainerSessionContext message.
   849  func (x *ContainerSessionContext) ToGRPCMessage() grpc.Message {
   850  	var m *session.ContainerSessionContext
   851  
   852  	if x != nil {
   853  		m = new(session.ContainerSessionContext)
   854  
   855  		m.SetVerb(ContainerSessionVerbToGRPCField(x.verb))
   856  		m.SetWildcard(x.wildcard)
   857  		m.SetContainerId(x.cid.ToGRPCMessage().(*refsGRPC.ContainerID))
   858  	}
   859  
   860  	return m
   861  }
   862  
   863  // FromGRPCMessage tries to restore ContainerSessionContext from grpc.Message.
   864  //
   865  // Returns message.ErrUnexpectedMessageType if m is not
   866  // a gRPC-generated session.ContainerSessionContext message.
   867  func (x *ContainerSessionContext) FromGRPCMessage(m grpc.Message) error {
   868  	v, ok := m.(*session.ContainerSessionContext)
   869  	if !ok {
   870  		return message.NewUnexpectedMessageType(m, v)
   871  	}
   872  
   873  	var err error
   874  
   875  	cid := v.GetContainerId()
   876  	if cid == nil {
   877  		x.cid = nil
   878  	} else {
   879  		if x.cid == nil {
   880  			x.cid = new(refs.ContainerID)
   881  		}
   882  
   883  		err = x.cid.FromGRPCMessage(cid)
   884  		if err != nil {
   885  			return err
   886  		}
   887  	}
   888  
   889  	x.verb = ContainerSessionVerbFromGRPCField(v.GetVerb())
   890  	x.wildcard = v.GetWildcard()
   891  
   892  	return nil
   893  }