code: func (svc *BuildInfoService) Get(c context.Context, req *milo.BuildInfoRequest) (*milo.BuildInfoResponse, error) {
  	projectHint := req.ProjectHint
  	if projectHint != "" {
  		if err := config.ValidateProjectName(projectHint); err != nil {
  			return nil, grpcutil.Errf(codes.InvalidArgument, "invalid project hint: %s", err.Error())
  		}
  	}
  
  	switch {
  	case req.GetBuildbot() != nil:
  		return buildbot.GetBuildInfo(c, req.GetBuildbot(), projectHint)
  
  	case req.GetSwarming() != nil:
  		return svc.Swarming.GetBuildInfo(c, req.GetSwarming(), projectHint)
  
  	case req.GetBuildbucket() != nil:
  		switch resp, err := svc.getFromContextURI(c, req.GetBuildbucket().GetId(), projectHint); err {
  		case nil:
  			return resp, nil
  		case buildbucket.ErrNotFound:
  			logging.WithError(err).Infof(c, "%d not found in context URI for build summary")
  			// continue to fallback code.
  		default:
  			return nil, err
  		}
  
  		// Resolve the swarming host/task from buildbucket.
  		host, taskID, err := buildbucket.GetSwarmingTaskID(c, strconv.FormatInt(req.GetBuildbucket().GetId(), 10))
  		if err != nil {
  			return nil, err
  		}
  		sReq := &milo.BuildInfoRequest_Swarming{
  			Host: host,
  			Task: taskID,
  		}
  		return svc.Swarming.GetBuildInfo(c, sReq, projectHint)
  
  	default:
  		return nil, grpcutil.Errf(codes.InvalidArgument, "must supply a build")
  	}
  }
docs: // Get implements milo.BuildInfoServer.