code: func (*TeleportWebSessionMarshaler) UnmarshalWebSession(bytes []byte) (WebSession, error) {
  	var h ResourceHeader
  	err := json.Unmarshal(bytes, &h)
  	if err != nil {
  		return nil, trace.Wrap(err)
  	}
  	switch h.Version {
  	case "":
  		var ws WebSessionV1
  		err := json.Unmarshal(bytes, &ws)
  		if err != nil {
  			return nil, trace.Wrap(err)
  		}
  		utils.UTC(&ws.Expires)
  		return ws.V2(), nil
  	case V2:
  		var ws WebSessionV2
  		if err := utils.UnmarshalWithSchema(GetWebSessionSchema(), &ws, bytes); err != nil {
  			return nil, trace.BadParameter(err.Error())
  		}
  		utils.UTC(&ws.Spec.BearerTokenExpires)
  		utils.UTC(&ws.Spec.Expires)
  
  		if err := ws.CheckAndSetDefaults(); err != nil {
  			return nil, trace.Wrap(err)
  		}
  
  		return &ws, nil
  	}
  
  	return nil, trace.BadParameter("web session resource version %v is not supported", h.Version)
  }
docs: // UnmarshalWebSession unmarshals web session from on-disk byte format