github.com/quickfeed/quickfeed@v0.0.0-20240507093252-ed8ca812a09c/qf/qfconnect/quickfeed.connect.go (about)

     1  // Code generated by protoc-gen-connect-go. DO NOT EDIT.
     2  //
     3  // Source: qf/quickfeed.proto
     4  
     5  package qfconnect
     6  
     7  import (
     8  	connect "connectrpc.com/connect"
     9  	context "context"
    10  	errors "errors"
    11  	qf "github.com/quickfeed/quickfeed/qf"
    12  	http "net/http"
    13  	strings "strings"
    14  )
    15  
    16  // This is a compile-time assertion to ensure that this generated file and the connect package are
    17  // compatible. If you get a compiler error that this constant is not defined, this code was
    18  // generated with a version of connect newer than the one compiled into your binary. You can fix the
    19  // problem by either regenerating this code with an older version of connect or updating the connect
    20  // version compiled into your binary.
    21  const _ = connect.IsAtLeastVersion1_13_0
    22  
    23  const (
    24  	// QuickFeedServiceName is the fully-qualified name of the QuickFeedService service.
    25  	QuickFeedServiceName = "qf.QuickFeedService"
    26  )
    27  
    28  // These constants are the fully-qualified names of the RPCs defined in this package. They're
    29  // exposed at runtime as Spec.Procedure and as the final two segments of the HTTP route.
    30  //
    31  // Note that these are different from the fully-qualified method names used by
    32  // google.golang.org/protobuf/reflect/protoreflect. To convert from these constants to
    33  // reflection-formatted method names, remove the leading slash and convert the remaining slash to a
    34  // period.
    35  const (
    36  	// QuickFeedServiceGetUserProcedure is the fully-qualified name of the QuickFeedService's GetUser
    37  	// RPC.
    38  	QuickFeedServiceGetUserProcedure = "/qf.QuickFeedService/GetUser"
    39  	// QuickFeedServiceGetUsersProcedure is the fully-qualified name of the QuickFeedService's GetUsers
    40  	// RPC.
    41  	QuickFeedServiceGetUsersProcedure = "/qf.QuickFeedService/GetUsers"
    42  	// QuickFeedServiceUpdateUserProcedure is the fully-qualified name of the QuickFeedService's
    43  	// UpdateUser RPC.
    44  	QuickFeedServiceUpdateUserProcedure = "/qf.QuickFeedService/UpdateUser"
    45  	// QuickFeedServiceGetGroupProcedure is the fully-qualified name of the QuickFeedService's GetGroup
    46  	// RPC.
    47  	QuickFeedServiceGetGroupProcedure = "/qf.QuickFeedService/GetGroup"
    48  	// QuickFeedServiceGetGroupsByCourseProcedure is the fully-qualified name of the QuickFeedService's
    49  	// GetGroupsByCourse RPC.
    50  	QuickFeedServiceGetGroupsByCourseProcedure = "/qf.QuickFeedService/GetGroupsByCourse"
    51  	// QuickFeedServiceCreateGroupProcedure is the fully-qualified name of the QuickFeedService's
    52  	// CreateGroup RPC.
    53  	QuickFeedServiceCreateGroupProcedure = "/qf.QuickFeedService/CreateGroup"
    54  	// QuickFeedServiceUpdateGroupProcedure is the fully-qualified name of the QuickFeedService's
    55  	// UpdateGroup RPC.
    56  	QuickFeedServiceUpdateGroupProcedure = "/qf.QuickFeedService/UpdateGroup"
    57  	// QuickFeedServiceDeleteGroupProcedure is the fully-qualified name of the QuickFeedService's
    58  	// DeleteGroup RPC.
    59  	QuickFeedServiceDeleteGroupProcedure = "/qf.QuickFeedService/DeleteGroup"
    60  	// QuickFeedServiceGetCourseProcedure is the fully-qualified name of the QuickFeedService's
    61  	// GetCourse RPC.
    62  	QuickFeedServiceGetCourseProcedure = "/qf.QuickFeedService/GetCourse"
    63  	// QuickFeedServiceGetCoursesProcedure is the fully-qualified name of the QuickFeedService's
    64  	// GetCourses RPC.
    65  	QuickFeedServiceGetCoursesProcedure = "/qf.QuickFeedService/GetCourses"
    66  	// QuickFeedServiceCreateCourseProcedure is the fully-qualified name of the QuickFeedService's
    67  	// CreateCourse RPC.
    68  	QuickFeedServiceCreateCourseProcedure = "/qf.QuickFeedService/CreateCourse"
    69  	// QuickFeedServiceUpdateCourseProcedure is the fully-qualified name of the QuickFeedService's
    70  	// UpdateCourse RPC.
    71  	QuickFeedServiceUpdateCourseProcedure = "/qf.QuickFeedService/UpdateCourse"
    72  	// QuickFeedServiceUpdateCourseVisibilityProcedure is the fully-qualified name of the
    73  	// QuickFeedService's UpdateCourseVisibility RPC.
    74  	QuickFeedServiceUpdateCourseVisibilityProcedure = "/qf.QuickFeedService/UpdateCourseVisibility"
    75  	// QuickFeedServiceGetAssignmentsProcedure is the fully-qualified name of the QuickFeedService's
    76  	// GetAssignments RPC.
    77  	QuickFeedServiceGetAssignmentsProcedure = "/qf.QuickFeedService/GetAssignments"
    78  	// QuickFeedServiceUpdateAssignmentsProcedure is the fully-qualified name of the QuickFeedService's
    79  	// UpdateAssignments RPC.
    80  	QuickFeedServiceUpdateAssignmentsProcedure = "/qf.QuickFeedService/UpdateAssignments"
    81  	// QuickFeedServiceGetEnrollmentsProcedure is the fully-qualified name of the QuickFeedService's
    82  	// GetEnrollments RPC.
    83  	QuickFeedServiceGetEnrollmentsProcedure = "/qf.QuickFeedService/GetEnrollments"
    84  	// QuickFeedServiceCreateEnrollmentProcedure is the fully-qualified name of the QuickFeedService's
    85  	// CreateEnrollment RPC.
    86  	QuickFeedServiceCreateEnrollmentProcedure = "/qf.QuickFeedService/CreateEnrollment"
    87  	// QuickFeedServiceUpdateEnrollmentsProcedure is the fully-qualified name of the QuickFeedService's
    88  	// UpdateEnrollments RPC.
    89  	QuickFeedServiceUpdateEnrollmentsProcedure = "/qf.QuickFeedService/UpdateEnrollments"
    90  	// QuickFeedServiceGetSubmissionProcedure is the fully-qualified name of the QuickFeedService's
    91  	// GetSubmission RPC.
    92  	QuickFeedServiceGetSubmissionProcedure = "/qf.QuickFeedService/GetSubmission"
    93  	// QuickFeedServiceGetSubmissionsProcedure is the fully-qualified name of the QuickFeedService's
    94  	// GetSubmissions RPC.
    95  	QuickFeedServiceGetSubmissionsProcedure = "/qf.QuickFeedService/GetSubmissions"
    96  	// QuickFeedServiceGetSubmissionsByCourseProcedure is the fully-qualified name of the
    97  	// QuickFeedService's GetSubmissionsByCourse RPC.
    98  	QuickFeedServiceGetSubmissionsByCourseProcedure = "/qf.QuickFeedService/GetSubmissionsByCourse"
    99  	// QuickFeedServiceUpdateSubmissionProcedure is the fully-qualified name of the QuickFeedService's
   100  	// UpdateSubmission RPC.
   101  	QuickFeedServiceUpdateSubmissionProcedure = "/qf.QuickFeedService/UpdateSubmission"
   102  	// QuickFeedServiceUpdateSubmissionsProcedure is the fully-qualified name of the QuickFeedService's
   103  	// UpdateSubmissions RPC.
   104  	QuickFeedServiceUpdateSubmissionsProcedure = "/qf.QuickFeedService/UpdateSubmissions"
   105  	// QuickFeedServiceRebuildSubmissionsProcedure is the fully-qualified name of the QuickFeedService's
   106  	// RebuildSubmissions RPC.
   107  	QuickFeedServiceRebuildSubmissionsProcedure = "/qf.QuickFeedService/RebuildSubmissions"
   108  	// QuickFeedServiceCreateBenchmarkProcedure is the fully-qualified name of the QuickFeedService's
   109  	// CreateBenchmark RPC.
   110  	QuickFeedServiceCreateBenchmarkProcedure = "/qf.QuickFeedService/CreateBenchmark"
   111  	// QuickFeedServiceUpdateBenchmarkProcedure is the fully-qualified name of the QuickFeedService's
   112  	// UpdateBenchmark RPC.
   113  	QuickFeedServiceUpdateBenchmarkProcedure = "/qf.QuickFeedService/UpdateBenchmark"
   114  	// QuickFeedServiceDeleteBenchmarkProcedure is the fully-qualified name of the QuickFeedService's
   115  	// DeleteBenchmark RPC.
   116  	QuickFeedServiceDeleteBenchmarkProcedure = "/qf.QuickFeedService/DeleteBenchmark"
   117  	// QuickFeedServiceCreateCriterionProcedure is the fully-qualified name of the QuickFeedService's
   118  	// CreateCriterion RPC.
   119  	QuickFeedServiceCreateCriterionProcedure = "/qf.QuickFeedService/CreateCriterion"
   120  	// QuickFeedServiceUpdateCriterionProcedure is the fully-qualified name of the QuickFeedService's
   121  	// UpdateCriterion RPC.
   122  	QuickFeedServiceUpdateCriterionProcedure = "/qf.QuickFeedService/UpdateCriterion"
   123  	// QuickFeedServiceDeleteCriterionProcedure is the fully-qualified name of the QuickFeedService's
   124  	// DeleteCriterion RPC.
   125  	QuickFeedServiceDeleteCriterionProcedure = "/qf.QuickFeedService/DeleteCriterion"
   126  	// QuickFeedServiceCreateReviewProcedure is the fully-qualified name of the QuickFeedService's
   127  	// CreateReview RPC.
   128  	QuickFeedServiceCreateReviewProcedure = "/qf.QuickFeedService/CreateReview"
   129  	// QuickFeedServiceUpdateReviewProcedure is the fully-qualified name of the QuickFeedService's
   130  	// UpdateReview RPC.
   131  	QuickFeedServiceUpdateReviewProcedure = "/qf.QuickFeedService/UpdateReview"
   132  	// QuickFeedServiceGetOrganizationProcedure is the fully-qualified name of the QuickFeedService's
   133  	// GetOrganization RPC.
   134  	QuickFeedServiceGetOrganizationProcedure = "/qf.QuickFeedService/GetOrganization"
   135  	// QuickFeedServiceGetRepositoriesProcedure is the fully-qualified name of the QuickFeedService's
   136  	// GetRepositories RPC.
   137  	QuickFeedServiceGetRepositoriesProcedure = "/qf.QuickFeedService/GetRepositories"
   138  	// QuickFeedServiceIsEmptyRepoProcedure is the fully-qualified name of the QuickFeedService's
   139  	// IsEmptyRepo RPC.
   140  	QuickFeedServiceIsEmptyRepoProcedure = "/qf.QuickFeedService/IsEmptyRepo"
   141  	// QuickFeedServiceSubmissionStreamProcedure is the fully-qualified name of the QuickFeedService's
   142  	// SubmissionStream RPC.
   143  	QuickFeedServiceSubmissionStreamProcedure = "/qf.QuickFeedService/SubmissionStream"
   144  )
   145  
   146  // These variables are the protoreflect.Descriptor objects for the RPCs defined in this package.
   147  var (
   148  	quickFeedServiceServiceDescriptor                      = qf.File_qf_quickfeed_proto.Services().ByName("QuickFeedService")
   149  	quickFeedServiceGetUserMethodDescriptor                = quickFeedServiceServiceDescriptor.Methods().ByName("GetUser")
   150  	quickFeedServiceGetUsersMethodDescriptor               = quickFeedServiceServiceDescriptor.Methods().ByName("GetUsers")
   151  	quickFeedServiceUpdateUserMethodDescriptor             = quickFeedServiceServiceDescriptor.Methods().ByName("UpdateUser")
   152  	quickFeedServiceGetGroupMethodDescriptor               = quickFeedServiceServiceDescriptor.Methods().ByName("GetGroup")
   153  	quickFeedServiceGetGroupsByCourseMethodDescriptor      = quickFeedServiceServiceDescriptor.Methods().ByName("GetGroupsByCourse")
   154  	quickFeedServiceCreateGroupMethodDescriptor            = quickFeedServiceServiceDescriptor.Methods().ByName("CreateGroup")
   155  	quickFeedServiceUpdateGroupMethodDescriptor            = quickFeedServiceServiceDescriptor.Methods().ByName("UpdateGroup")
   156  	quickFeedServiceDeleteGroupMethodDescriptor            = quickFeedServiceServiceDescriptor.Methods().ByName("DeleteGroup")
   157  	quickFeedServiceGetCourseMethodDescriptor              = quickFeedServiceServiceDescriptor.Methods().ByName("GetCourse")
   158  	quickFeedServiceGetCoursesMethodDescriptor             = quickFeedServiceServiceDescriptor.Methods().ByName("GetCourses")
   159  	quickFeedServiceCreateCourseMethodDescriptor           = quickFeedServiceServiceDescriptor.Methods().ByName("CreateCourse")
   160  	quickFeedServiceUpdateCourseMethodDescriptor           = quickFeedServiceServiceDescriptor.Methods().ByName("UpdateCourse")
   161  	quickFeedServiceUpdateCourseVisibilityMethodDescriptor = quickFeedServiceServiceDescriptor.Methods().ByName("UpdateCourseVisibility")
   162  	quickFeedServiceGetAssignmentsMethodDescriptor         = quickFeedServiceServiceDescriptor.Methods().ByName("GetAssignments")
   163  	quickFeedServiceUpdateAssignmentsMethodDescriptor      = quickFeedServiceServiceDescriptor.Methods().ByName("UpdateAssignments")
   164  	quickFeedServiceGetEnrollmentsMethodDescriptor         = quickFeedServiceServiceDescriptor.Methods().ByName("GetEnrollments")
   165  	quickFeedServiceCreateEnrollmentMethodDescriptor       = quickFeedServiceServiceDescriptor.Methods().ByName("CreateEnrollment")
   166  	quickFeedServiceUpdateEnrollmentsMethodDescriptor      = quickFeedServiceServiceDescriptor.Methods().ByName("UpdateEnrollments")
   167  	quickFeedServiceGetSubmissionMethodDescriptor          = quickFeedServiceServiceDescriptor.Methods().ByName("GetSubmission")
   168  	quickFeedServiceGetSubmissionsMethodDescriptor         = quickFeedServiceServiceDescriptor.Methods().ByName("GetSubmissions")
   169  	quickFeedServiceGetSubmissionsByCourseMethodDescriptor = quickFeedServiceServiceDescriptor.Methods().ByName("GetSubmissionsByCourse")
   170  	quickFeedServiceUpdateSubmissionMethodDescriptor       = quickFeedServiceServiceDescriptor.Methods().ByName("UpdateSubmission")
   171  	quickFeedServiceUpdateSubmissionsMethodDescriptor      = quickFeedServiceServiceDescriptor.Methods().ByName("UpdateSubmissions")
   172  	quickFeedServiceRebuildSubmissionsMethodDescriptor     = quickFeedServiceServiceDescriptor.Methods().ByName("RebuildSubmissions")
   173  	quickFeedServiceCreateBenchmarkMethodDescriptor        = quickFeedServiceServiceDescriptor.Methods().ByName("CreateBenchmark")
   174  	quickFeedServiceUpdateBenchmarkMethodDescriptor        = quickFeedServiceServiceDescriptor.Methods().ByName("UpdateBenchmark")
   175  	quickFeedServiceDeleteBenchmarkMethodDescriptor        = quickFeedServiceServiceDescriptor.Methods().ByName("DeleteBenchmark")
   176  	quickFeedServiceCreateCriterionMethodDescriptor        = quickFeedServiceServiceDescriptor.Methods().ByName("CreateCriterion")
   177  	quickFeedServiceUpdateCriterionMethodDescriptor        = quickFeedServiceServiceDescriptor.Methods().ByName("UpdateCriterion")
   178  	quickFeedServiceDeleteCriterionMethodDescriptor        = quickFeedServiceServiceDescriptor.Methods().ByName("DeleteCriterion")
   179  	quickFeedServiceCreateReviewMethodDescriptor           = quickFeedServiceServiceDescriptor.Methods().ByName("CreateReview")
   180  	quickFeedServiceUpdateReviewMethodDescriptor           = quickFeedServiceServiceDescriptor.Methods().ByName("UpdateReview")
   181  	quickFeedServiceGetOrganizationMethodDescriptor        = quickFeedServiceServiceDescriptor.Methods().ByName("GetOrganization")
   182  	quickFeedServiceGetRepositoriesMethodDescriptor        = quickFeedServiceServiceDescriptor.Methods().ByName("GetRepositories")
   183  	quickFeedServiceIsEmptyRepoMethodDescriptor            = quickFeedServiceServiceDescriptor.Methods().ByName("IsEmptyRepo")
   184  	quickFeedServiceSubmissionStreamMethodDescriptor       = quickFeedServiceServiceDescriptor.Methods().ByName("SubmissionStream")
   185  )
   186  
   187  // QuickFeedServiceClient is a client for the qf.QuickFeedService service.
   188  type QuickFeedServiceClient interface {
   189  	GetUser(context.Context, *connect.Request[qf.Void]) (*connect.Response[qf.User], error)
   190  	GetUsers(context.Context, *connect.Request[qf.Void]) (*connect.Response[qf.Users], error)
   191  	UpdateUser(context.Context, *connect.Request[qf.User]) (*connect.Response[qf.Void], error)
   192  	// GetGroup returns a group with the given group ID or user ID. Course ID is required.
   193  	GetGroup(context.Context, *connect.Request[qf.GroupRequest]) (*connect.Response[qf.Group], error)
   194  	GetGroupsByCourse(context.Context, *connect.Request[qf.CourseRequest]) (*connect.Response[qf.Groups], error)
   195  	CreateGroup(context.Context, *connect.Request[qf.Group]) (*connect.Response[qf.Group], error)
   196  	UpdateGroup(context.Context, *connect.Request[qf.Group]) (*connect.Response[qf.Group], error)
   197  	DeleteGroup(context.Context, *connect.Request[qf.GroupRequest]) (*connect.Response[qf.Void], error)
   198  	GetCourse(context.Context, *connect.Request[qf.CourseRequest]) (*connect.Response[qf.Course], error)
   199  	GetCourses(context.Context, *connect.Request[qf.Void]) (*connect.Response[qf.Courses], error)
   200  	CreateCourse(context.Context, *connect.Request[qf.Course]) (*connect.Response[qf.Course], error)
   201  	UpdateCourse(context.Context, *connect.Request[qf.Course]) (*connect.Response[qf.Void], error)
   202  	UpdateCourseVisibility(context.Context, *connect.Request[qf.Enrollment]) (*connect.Response[qf.Void], error)
   203  	GetAssignments(context.Context, *connect.Request[qf.CourseRequest]) (*connect.Response[qf.Assignments], error)
   204  	UpdateAssignments(context.Context, *connect.Request[qf.CourseRequest]) (*connect.Response[qf.Void], error)
   205  	GetEnrollments(context.Context, *connect.Request[qf.EnrollmentRequest]) (*connect.Response[qf.Enrollments], error)
   206  	CreateEnrollment(context.Context, *connect.Request[qf.Enrollment]) (*connect.Response[qf.Void], error)
   207  	UpdateEnrollments(context.Context, *connect.Request[qf.Enrollments]) (*connect.Response[qf.Void], error)
   208  	GetSubmission(context.Context, *connect.Request[qf.SubmissionRequest]) (*connect.Response[qf.Submission], error)
   209  	// Get latest submissions for all course assignments for a user or a group.
   210  	GetSubmissions(context.Context, *connect.Request[qf.SubmissionRequest]) (*connect.Response[qf.Submissions], error)
   211  	// Get lab submissions for every course user or every course group
   212  	GetSubmissionsByCourse(context.Context, *connect.Request[qf.SubmissionRequest]) (*connect.Response[qf.CourseSubmissions], error)
   213  	UpdateSubmission(context.Context, *connect.Request[qf.UpdateSubmissionRequest]) (*connect.Response[qf.Void], error)
   214  	UpdateSubmissions(context.Context, *connect.Request[qf.UpdateSubmissionsRequest]) (*connect.Response[qf.Void], error)
   215  	RebuildSubmissions(context.Context, *connect.Request[qf.RebuildRequest]) (*connect.Response[qf.Void], error)
   216  	CreateBenchmark(context.Context, *connect.Request[qf.GradingBenchmark]) (*connect.Response[qf.GradingBenchmark], error)
   217  	UpdateBenchmark(context.Context, *connect.Request[qf.GradingBenchmark]) (*connect.Response[qf.Void], error)
   218  	DeleteBenchmark(context.Context, *connect.Request[qf.GradingBenchmark]) (*connect.Response[qf.Void], error)
   219  	CreateCriterion(context.Context, *connect.Request[qf.GradingCriterion]) (*connect.Response[qf.GradingCriterion], error)
   220  	UpdateCriterion(context.Context, *connect.Request[qf.GradingCriterion]) (*connect.Response[qf.Void], error)
   221  	DeleteCriterion(context.Context, *connect.Request[qf.GradingCriterion]) (*connect.Response[qf.Void], error)
   222  	CreateReview(context.Context, *connect.Request[qf.ReviewRequest]) (*connect.Response[qf.Review], error)
   223  	UpdateReview(context.Context, *connect.Request[qf.ReviewRequest]) (*connect.Response[qf.Review], error)
   224  	// GetOrganization returns the organization with the given organization name.
   225  	// Note that organization ID is not used in the request, but it is populated in the response.
   226  	GetOrganization(context.Context, *connect.Request[qf.Organization]) (*connect.Response[qf.Organization], error)
   227  	GetRepositories(context.Context, *connect.Request[qf.CourseRequest]) (*connect.Response[qf.Repositories], error)
   228  	IsEmptyRepo(context.Context, *connect.Request[qf.RepositoryRequest]) (*connect.Response[qf.Void], error)
   229  	SubmissionStream(context.Context, *connect.Request[qf.Void]) (*connect.ServerStreamForClient[qf.Submission], error)
   230  }
   231  
   232  // NewQuickFeedServiceClient constructs a client for the qf.QuickFeedService service. By default, it
   233  // uses the Connect protocol with the binary Protobuf Codec, asks for gzipped responses, and sends
   234  // uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the connect.WithGRPC() or
   235  // connect.WithGRPCWeb() options.
   236  //
   237  // The URL supplied here should be the base URL for the Connect or gRPC server (for example,
   238  // http://api.acme.com or https://acme.com/grpc).
   239  func NewQuickFeedServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) QuickFeedServiceClient {
   240  	baseURL = strings.TrimRight(baseURL, "/")
   241  	return &quickFeedServiceClient{
   242  		getUser: connect.NewClient[qf.Void, qf.User](
   243  			httpClient,
   244  			baseURL+QuickFeedServiceGetUserProcedure,
   245  			connect.WithSchema(quickFeedServiceGetUserMethodDescriptor),
   246  			connect.WithClientOptions(opts...),
   247  		),
   248  		getUsers: connect.NewClient[qf.Void, qf.Users](
   249  			httpClient,
   250  			baseURL+QuickFeedServiceGetUsersProcedure,
   251  			connect.WithSchema(quickFeedServiceGetUsersMethodDescriptor),
   252  			connect.WithClientOptions(opts...),
   253  		),
   254  		updateUser: connect.NewClient[qf.User, qf.Void](
   255  			httpClient,
   256  			baseURL+QuickFeedServiceUpdateUserProcedure,
   257  			connect.WithSchema(quickFeedServiceUpdateUserMethodDescriptor),
   258  			connect.WithClientOptions(opts...),
   259  		),
   260  		getGroup: connect.NewClient[qf.GroupRequest, qf.Group](
   261  			httpClient,
   262  			baseURL+QuickFeedServiceGetGroupProcedure,
   263  			connect.WithSchema(quickFeedServiceGetGroupMethodDescriptor),
   264  			connect.WithClientOptions(opts...),
   265  		),
   266  		getGroupsByCourse: connect.NewClient[qf.CourseRequest, qf.Groups](
   267  			httpClient,
   268  			baseURL+QuickFeedServiceGetGroupsByCourseProcedure,
   269  			connect.WithSchema(quickFeedServiceGetGroupsByCourseMethodDescriptor),
   270  			connect.WithClientOptions(opts...),
   271  		),
   272  		createGroup: connect.NewClient[qf.Group, qf.Group](
   273  			httpClient,
   274  			baseURL+QuickFeedServiceCreateGroupProcedure,
   275  			connect.WithSchema(quickFeedServiceCreateGroupMethodDescriptor),
   276  			connect.WithClientOptions(opts...),
   277  		),
   278  		updateGroup: connect.NewClient[qf.Group, qf.Group](
   279  			httpClient,
   280  			baseURL+QuickFeedServiceUpdateGroupProcedure,
   281  			connect.WithSchema(quickFeedServiceUpdateGroupMethodDescriptor),
   282  			connect.WithClientOptions(opts...),
   283  		),
   284  		deleteGroup: connect.NewClient[qf.GroupRequest, qf.Void](
   285  			httpClient,
   286  			baseURL+QuickFeedServiceDeleteGroupProcedure,
   287  			connect.WithSchema(quickFeedServiceDeleteGroupMethodDescriptor),
   288  			connect.WithClientOptions(opts...),
   289  		),
   290  		getCourse: connect.NewClient[qf.CourseRequest, qf.Course](
   291  			httpClient,
   292  			baseURL+QuickFeedServiceGetCourseProcedure,
   293  			connect.WithSchema(quickFeedServiceGetCourseMethodDescriptor),
   294  			connect.WithClientOptions(opts...),
   295  		),
   296  		getCourses: connect.NewClient[qf.Void, qf.Courses](
   297  			httpClient,
   298  			baseURL+QuickFeedServiceGetCoursesProcedure,
   299  			connect.WithSchema(quickFeedServiceGetCoursesMethodDescriptor),
   300  			connect.WithClientOptions(opts...),
   301  		),
   302  		createCourse: connect.NewClient[qf.Course, qf.Course](
   303  			httpClient,
   304  			baseURL+QuickFeedServiceCreateCourseProcedure,
   305  			connect.WithSchema(quickFeedServiceCreateCourseMethodDescriptor),
   306  			connect.WithClientOptions(opts...),
   307  		),
   308  		updateCourse: connect.NewClient[qf.Course, qf.Void](
   309  			httpClient,
   310  			baseURL+QuickFeedServiceUpdateCourseProcedure,
   311  			connect.WithSchema(quickFeedServiceUpdateCourseMethodDescriptor),
   312  			connect.WithClientOptions(opts...),
   313  		),
   314  		updateCourseVisibility: connect.NewClient[qf.Enrollment, qf.Void](
   315  			httpClient,
   316  			baseURL+QuickFeedServiceUpdateCourseVisibilityProcedure,
   317  			connect.WithSchema(quickFeedServiceUpdateCourseVisibilityMethodDescriptor),
   318  			connect.WithClientOptions(opts...),
   319  		),
   320  		getAssignments: connect.NewClient[qf.CourseRequest, qf.Assignments](
   321  			httpClient,
   322  			baseURL+QuickFeedServiceGetAssignmentsProcedure,
   323  			connect.WithSchema(quickFeedServiceGetAssignmentsMethodDescriptor),
   324  			connect.WithClientOptions(opts...),
   325  		),
   326  		updateAssignments: connect.NewClient[qf.CourseRequest, qf.Void](
   327  			httpClient,
   328  			baseURL+QuickFeedServiceUpdateAssignmentsProcedure,
   329  			connect.WithSchema(quickFeedServiceUpdateAssignmentsMethodDescriptor),
   330  			connect.WithClientOptions(opts...),
   331  		),
   332  		getEnrollments: connect.NewClient[qf.EnrollmentRequest, qf.Enrollments](
   333  			httpClient,
   334  			baseURL+QuickFeedServiceGetEnrollmentsProcedure,
   335  			connect.WithSchema(quickFeedServiceGetEnrollmentsMethodDescriptor),
   336  			connect.WithClientOptions(opts...),
   337  		),
   338  		createEnrollment: connect.NewClient[qf.Enrollment, qf.Void](
   339  			httpClient,
   340  			baseURL+QuickFeedServiceCreateEnrollmentProcedure,
   341  			connect.WithSchema(quickFeedServiceCreateEnrollmentMethodDescriptor),
   342  			connect.WithClientOptions(opts...),
   343  		),
   344  		updateEnrollments: connect.NewClient[qf.Enrollments, qf.Void](
   345  			httpClient,
   346  			baseURL+QuickFeedServiceUpdateEnrollmentsProcedure,
   347  			connect.WithSchema(quickFeedServiceUpdateEnrollmentsMethodDescriptor),
   348  			connect.WithClientOptions(opts...),
   349  		),
   350  		getSubmission: connect.NewClient[qf.SubmissionRequest, qf.Submission](
   351  			httpClient,
   352  			baseURL+QuickFeedServiceGetSubmissionProcedure,
   353  			connect.WithSchema(quickFeedServiceGetSubmissionMethodDescriptor),
   354  			connect.WithClientOptions(opts...),
   355  		),
   356  		getSubmissions: connect.NewClient[qf.SubmissionRequest, qf.Submissions](
   357  			httpClient,
   358  			baseURL+QuickFeedServiceGetSubmissionsProcedure,
   359  			connect.WithSchema(quickFeedServiceGetSubmissionsMethodDescriptor),
   360  			connect.WithClientOptions(opts...),
   361  		),
   362  		getSubmissionsByCourse: connect.NewClient[qf.SubmissionRequest, qf.CourseSubmissions](
   363  			httpClient,
   364  			baseURL+QuickFeedServiceGetSubmissionsByCourseProcedure,
   365  			connect.WithSchema(quickFeedServiceGetSubmissionsByCourseMethodDescriptor),
   366  			connect.WithClientOptions(opts...),
   367  		),
   368  		updateSubmission: connect.NewClient[qf.UpdateSubmissionRequest, qf.Void](
   369  			httpClient,
   370  			baseURL+QuickFeedServiceUpdateSubmissionProcedure,
   371  			connect.WithSchema(quickFeedServiceUpdateSubmissionMethodDescriptor),
   372  			connect.WithClientOptions(opts...),
   373  		),
   374  		updateSubmissions: connect.NewClient[qf.UpdateSubmissionsRequest, qf.Void](
   375  			httpClient,
   376  			baseURL+QuickFeedServiceUpdateSubmissionsProcedure,
   377  			connect.WithSchema(quickFeedServiceUpdateSubmissionsMethodDescriptor),
   378  			connect.WithClientOptions(opts...),
   379  		),
   380  		rebuildSubmissions: connect.NewClient[qf.RebuildRequest, qf.Void](
   381  			httpClient,
   382  			baseURL+QuickFeedServiceRebuildSubmissionsProcedure,
   383  			connect.WithSchema(quickFeedServiceRebuildSubmissionsMethodDescriptor),
   384  			connect.WithClientOptions(opts...),
   385  		),
   386  		createBenchmark: connect.NewClient[qf.GradingBenchmark, qf.GradingBenchmark](
   387  			httpClient,
   388  			baseURL+QuickFeedServiceCreateBenchmarkProcedure,
   389  			connect.WithSchema(quickFeedServiceCreateBenchmarkMethodDescriptor),
   390  			connect.WithClientOptions(opts...),
   391  		),
   392  		updateBenchmark: connect.NewClient[qf.GradingBenchmark, qf.Void](
   393  			httpClient,
   394  			baseURL+QuickFeedServiceUpdateBenchmarkProcedure,
   395  			connect.WithSchema(quickFeedServiceUpdateBenchmarkMethodDescriptor),
   396  			connect.WithClientOptions(opts...),
   397  		),
   398  		deleteBenchmark: connect.NewClient[qf.GradingBenchmark, qf.Void](
   399  			httpClient,
   400  			baseURL+QuickFeedServiceDeleteBenchmarkProcedure,
   401  			connect.WithSchema(quickFeedServiceDeleteBenchmarkMethodDescriptor),
   402  			connect.WithClientOptions(opts...),
   403  		),
   404  		createCriterion: connect.NewClient[qf.GradingCriterion, qf.GradingCriterion](
   405  			httpClient,
   406  			baseURL+QuickFeedServiceCreateCriterionProcedure,
   407  			connect.WithSchema(quickFeedServiceCreateCriterionMethodDescriptor),
   408  			connect.WithClientOptions(opts...),
   409  		),
   410  		updateCriterion: connect.NewClient[qf.GradingCriterion, qf.Void](
   411  			httpClient,
   412  			baseURL+QuickFeedServiceUpdateCriterionProcedure,
   413  			connect.WithSchema(quickFeedServiceUpdateCriterionMethodDescriptor),
   414  			connect.WithClientOptions(opts...),
   415  		),
   416  		deleteCriterion: connect.NewClient[qf.GradingCriterion, qf.Void](
   417  			httpClient,
   418  			baseURL+QuickFeedServiceDeleteCriterionProcedure,
   419  			connect.WithSchema(quickFeedServiceDeleteCriterionMethodDescriptor),
   420  			connect.WithClientOptions(opts...),
   421  		),
   422  		createReview: connect.NewClient[qf.ReviewRequest, qf.Review](
   423  			httpClient,
   424  			baseURL+QuickFeedServiceCreateReviewProcedure,
   425  			connect.WithSchema(quickFeedServiceCreateReviewMethodDescriptor),
   426  			connect.WithClientOptions(opts...),
   427  		),
   428  		updateReview: connect.NewClient[qf.ReviewRequest, qf.Review](
   429  			httpClient,
   430  			baseURL+QuickFeedServiceUpdateReviewProcedure,
   431  			connect.WithSchema(quickFeedServiceUpdateReviewMethodDescriptor),
   432  			connect.WithClientOptions(opts...),
   433  		),
   434  		getOrganization: connect.NewClient[qf.Organization, qf.Organization](
   435  			httpClient,
   436  			baseURL+QuickFeedServiceGetOrganizationProcedure,
   437  			connect.WithSchema(quickFeedServiceGetOrganizationMethodDescriptor),
   438  			connect.WithClientOptions(opts...),
   439  		),
   440  		getRepositories: connect.NewClient[qf.CourseRequest, qf.Repositories](
   441  			httpClient,
   442  			baseURL+QuickFeedServiceGetRepositoriesProcedure,
   443  			connect.WithSchema(quickFeedServiceGetRepositoriesMethodDescriptor),
   444  			connect.WithClientOptions(opts...),
   445  		),
   446  		isEmptyRepo: connect.NewClient[qf.RepositoryRequest, qf.Void](
   447  			httpClient,
   448  			baseURL+QuickFeedServiceIsEmptyRepoProcedure,
   449  			connect.WithSchema(quickFeedServiceIsEmptyRepoMethodDescriptor),
   450  			connect.WithClientOptions(opts...),
   451  		),
   452  		submissionStream: connect.NewClient[qf.Void, qf.Submission](
   453  			httpClient,
   454  			baseURL+QuickFeedServiceSubmissionStreamProcedure,
   455  			connect.WithSchema(quickFeedServiceSubmissionStreamMethodDescriptor),
   456  			connect.WithClientOptions(opts...),
   457  		),
   458  	}
   459  }
   460  
   461  // quickFeedServiceClient implements QuickFeedServiceClient.
   462  type quickFeedServiceClient struct {
   463  	getUser                *connect.Client[qf.Void, qf.User]
   464  	getUsers               *connect.Client[qf.Void, qf.Users]
   465  	updateUser             *connect.Client[qf.User, qf.Void]
   466  	getGroup               *connect.Client[qf.GroupRequest, qf.Group]
   467  	getGroupsByCourse      *connect.Client[qf.CourseRequest, qf.Groups]
   468  	createGroup            *connect.Client[qf.Group, qf.Group]
   469  	updateGroup            *connect.Client[qf.Group, qf.Group]
   470  	deleteGroup            *connect.Client[qf.GroupRequest, qf.Void]
   471  	getCourse              *connect.Client[qf.CourseRequest, qf.Course]
   472  	getCourses             *connect.Client[qf.Void, qf.Courses]
   473  	createCourse           *connect.Client[qf.Course, qf.Course]
   474  	updateCourse           *connect.Client[qf.Course, qf.Void]
   475  	updateCourseVisibility *connect.Client[qf.Enrollment, qf.Void]
   476  	getAssignments         *connect.Client[qf.CourseRequest, qf.Assignments]
   477  	updateAssignments      *connect.Client[qf.CourseRequest, qf.Void]
   478  	getEnrollments         *connect.Client[qf.EnrollmentRequest, qf.Enrollments]
   479  	createEnrollment       *connect.Client[qf.Enrollment, qf.Void]
   480  	updateEnrollments      *connect.Client[qf.Enrollments, qf.Void]
   481  	getSubmission          *connect.Client[qf.SubmissionRequest, qf.Submission]
   482  	getSubmissions         *connect.Client[qf.SubmissionRequest, qf.Submissions]
   483  	getSubmissionsByCourse *connect.Client[qf.SubmissionRequest, qf.CourseSubmissions]
   484  	updateSubmission       *connect.Client[qf.UpdateSubmissionRequest, qf.Void]
   485  	updateSubmissions      *connect.Client[qf.UpdateSubmissionsRequest, qf.Void]
   486  	rebuildSubmissions     *connect.Client[qf.RebuildRequest, qf.Void]
   487  	createBenchmark        *connect.Client[qf.GradingBenchmark, qf.GradingBenchmark]
   488  	updateBenchmark        *connect.Client[qf.GradingBenchmark, qf.Void]
   489  	deleteBenchmark        *connect.Client[qf.GradingBenchmark, qf.Void]
   490  	createCriterion        *connect.Client[qf.GradingCriterion, qf.GradingCriterion]
   491  	updateCriterion        *connect.Client[qf.GradingCriterion, qf.Void]
   492  	deleteCriterion        *connect.Client[qf.GradingCriterion, qf.Void]
   493  	createReview           *connect.Client[qf.ReviewRequest, qf.Review]
   494  	updateReview           *connect.Client[qf.ReviewRequest, qf.Review]
   495  	getOrganization        *connect.Client[qf.Organization, qf.Organization]
   496  	getRepositories        *connect.Client[qf.CourseRequest, qf.Repositories]
   497  	isEmptyRepo            *connect.Client[qf.RepositoryRequest, qf.Void]
   498  	submissionStream       *connect.Client[qf.Void, qf.Submission]
   499  }
   500  
   501  // GetUser calls qf.QuickFeedService.GetUser.
   502  func (c *quickFeedServiceClient) GetUser(ctx context.Context, req *connect.Request[qf.Void]) (*connect.Response[qf.User], error) {
   503  	return c.getUser.CallUnary(ctx, req)
   504  }
   505  
   506  // GetUsers calls qf.QuickFeedService.GetUsers.
   507  func (c *quickFeedServiceClient) GetUsers(ctx context.Context, req *connect.Request[qf.Void]) (*connect.Response[qf.Users], error) {
   508  	return c.getUsers.CallUnary(ctx, req)
   509  }
   510  
   511  // UpdateUser calls qf.QuickFeedService.UpdateUser.
   512  func (c *quickFeedServiceClient) UpdateUser(ctx context.Context, req *connect.Request[qf.User]) (*connect.Response[qf.Void], error) {
   513  	return c.updateUser.CallUnary(ctx, req)
   514  }
   515  
   516  // GetGroup calls qf.QuickFeedService.GetGroup.
   517  func (c *quickFeedServiceClient) GetGroup(ctx context.Context, req *connect.Request[qf.GroupRequest]) (*connect.Response[qf.Group], error) {
   518  	return c.getGroup.CallUnary(ctx, req)
   519  }
   520  
   521  // GetGroupsByCourse calls qf.QuickFeedService.GetGroupsByCourse.
   522  func (c *quickFeedServiceClient) GetGroupsByCourse(ctx context.Context, req *connect.Request[qf.CourseRequest]) (*connect.Response[qf.Groups], error) {
   523  	return c.getGroupsByCourse.CallUnary(ctx, req)
   524  }
   525  
   526  // CreateGroup calls qf.QuickFeedService.CreateGroup.
   527  func (c *quickFeedServiceClient) CreateGroup(ctx context.Context, req *connect.Request[qf.Group]) (*connect.Response[qf.Group], error) {
   528  	return c.createGroup.CallUnary(ctx, req)
   529  }
   530  
   531  // UpdateGroup calls qf.QuickFeedService.UpdateGroup.
   532  func (c *quickFeedServiceClient) UpdateGroup(ctx context.Context, req *connect.Request[qf.Group]) (*connect.Response[qf.Group], error) {
   533  	return c.updateGroup.CallUnary(ctx, req)
   534  }
   535  
   536  // DeleteGroup calls qf.QuickFeedService.DeleteGroup.
   537  func (c *quickFeedServiceClient) DeleteGroup(ctx context.Context, req *connect.Request[qf.GroupRequest]) (*connect.Response[qf.Void], error) {
   538  	return c.deleteGroup.CallUnary(ctx, req)
   539  }
   540  
   541  // GetCourse calls qf.QuickFeedService.GetCourse.
   542  func (c *quickFeedServiceClient) GetCourse(ctx context.Context, req *connect.Request[qf.CourseRequest]) (*connect.Response[qf.Course], error) {
   543  	return c.getCourse.CallUnary(ctx, req)
   544  }
   545  
   546  // GetCourses calls qf.QuickFeedService.GetCourses.
   547  func (c *quickFeedServiceClient) GetCourses(ctx context.Context, req *connect.Request[qf.Void]) (*connect.Response[qf.Courses], error) {
   548  	return c.getCourses.CallUnary(ctx, req)
   549  }
   550  
   551  // CreateCourse calls qf.QuickFeedService.CreateCourse.
   552  func (c *quickFeedServiceClient) CreateCourse(ctx context.Context, req *connect.Request[qf.Course]) (*connect.Response[qf.Course], error) {
   553  	return c.createCourse.CallUnary(ctx, req)
   554  }
   555  
   556  // UpdateCourse calls qf.QuickFeedService.UpdateCourse.
   557  func (c *quickFeedServiceClient) UpdateCourse(ctx context.Context, req *connect.Request[qf.Course]) (*connect.Response[qf.Void], error) {
   558  	return c.updateCourse.CallUnary(ctx, req)
   559  }
   560  
   561  // UpdateCourseVisibility calls qf.QuickFeedService.UpdateCourseVisibility.
   562  func (c *quickFeedServiceClient) UpdateCourseVisibility(ctx context.Context, req *connect.Request[qf.Enrollment]) (*connect.Response[qf.Void], error) {
   563  	return c.updateCourseVisibility.CallUnary(ctx, req)
   564  }
   565  
   566  // GetAssignments calls qf.QuickFeedService.GetAssignments.
   567  func (c *quickFeedServiceClient) GetAssignments(ctx context.Context, req *connect.Request[qf.CourseRequest]) (*connect.Response[qf.Assignments], error) {
   568  	return c.getAssignments.CallUnary(ctx, req)
   569  }
   570  
   571  // UpdateAssignments calls qf.QuickFeedService.UpdateAssignments.
   572  func (c *quickFeedServiceClient) UpdateAssignments(ctx context.Context, req *connect.Request[qf.CourseRequest]) (*connect.Response[qf.Void], error) {
   573  	return c.updateAssignments.CallUnary(ctx, req)
   574  }
   575  
   576  // GetEnrollments calls qf.QuickFeedService.GetEnrollments.
   577  func (c *quickFeedServiceClient) GetEnrollments(ctx context.Context, req *connect.Request[qf.EnrollmentRequest]) (*connect.Response[qf.Enrollments], error) {
   578  	return c.getEnrollments.CallUnary(ctx, req)
   579  }
   580  
   581  // CreateEnrollment calls qf.QuickFeedService.CreateEnrollment.
   582  func (c *quickFeedServiceClient) CreateEnrollment(ctx context.Context, req *connect.Request[qf.Enrollment]) (*connect.Response[qf.Void], error) {
   583  	return c.createEnrollment.CallUnary(ctx, req)
   584  }
   585  
   586  // UpdateEnrollments calls qf.QuickFeedService.UpdateEnrollments.
   587  func (c *quickFeedServiceClient) UpdateEnrollments(ctx context.Context, req *connect.Request[qf.Enrollments]) (*connect.Response[qf.Void], error) {
   588  	return c.updateEnrollments.CallUnary(ctx, req)
   589  }
   590  
   591  // GetSubmission calls qf.QuickFeedService.GetSubmission.
   592  func (c *quickFeedServiceClient) GetSubmission(ctx context.Context, req *connect.Request[qf.SubmissionRequest]) (*connect.Response[qf.Submission], error) {
   593  	return c.getSubmission.CallUnary(ctx, req)
   594  }
   595  
   596  // GetSubmissions calls qf.QuickFeedService.GetSubmissions.
   597  func (c *quickFeedServiceClient) GetSubmissions(ctx context.Context, req *connect.Request[qf.SubmissionRequest]) (*connect.Response[qf.Submissions], error) {
   598  	return c.getSubmissions.CallUnary(ctx, req)
   599  }
   600  
   601  // GetSubmissionsByCourse calls qf.QuickFeedService.GetSubmissionsByCourse.
   602  func (c *quickFeedServiceClient) GetSubmissionsByCourse(ctx context.Context, req *connect.Request[qf.SubmissionRequest]) (*connect.Response[qf.CourseSubmissions], error) {
   603  	return c.getSubmissionsByCourse.CallUnary(ctx, req)
   604  }
   605  
   606  // UpdateSubmission calls qf.QuickFeedService.UpdateSubmission.
   607  func (c *quickFeedServiceClient) UpdateSubmission(ctx context.Context, req *connect.Request[qf.UpdateSubmissionRequest]) (*connect.Response[qf.Void], error) {
   608  	return c.updateSubmission.CallUnary(ctx, req)
   609  }
   610  
   611  // UpdateSubmissions calls qf.QuickFeedService.UpdateSubmissions.
   612  func (c *quickFeedServiceClient) UpdateSubmissions(ctx context.Context, req *connect.Request[qf.UpdateSubmissionsRequest]) (*connect.Response[qf.Void], error) {
   613  	return c.updateSubmissions.CallUnary(ctx, req)
   614  }
   615  
   616  // RebuildSubmissions calls qf.QuickFeedService.RebuildSubmissions.
   617  func (c *quickFeedServiceClient) RebuildSubmissions(ctx context.Context, req *connect.Request[qf.RebuildRequest]) (*connect.Response[qf.Void], error) {
   618  	return c.rebuildSubmissions.CallUnary(ctx, req)
   619  }
   620  
   621  // CreateBenchmark calls qf.QuickFeedService.CreateBenchmark.
   622  func (c *quickFeedServiceClient) CreateBenchmark(ctx context.Context, req *connect.Request[qf.GradingBenchmark]) (*connect.Response[qf.GradingBenchmark], error) {
   623  	return c.createBenchmark.CallUnary(ctx, req)
   624  }
   625  
   626  // UpdateBenchmark calls qf.QuickFeedService.UpdateBenchmark.
   627  func (c *quickFeedServiceClient) UpdateBenchmark(ctx context.Context, req *connect.Request[qf.GradingBenchmark]) (*connect.Response[qf.Void], error) {
   628  	return c.updateBenchmark.CallUnary(ctx, req)
   629  }
   630  
   631  // DeleteBenchmark calls qf.QuickFeedService.DeleteBenchmark.
   632  func (c *quickFeedServiceClient) DeleteBenchmark(ctx context.Context, req *connect.Request[qf.GradingBenchmark]) (*connect.Response[qf.Void], error) {
   633  	return c.deleteBenchmark.CallUnary(ctx, req)
   634  }
   635  
   636  // CreateCriterion calls qf.QuickFeedService.CreateCriterion.
   637  func (c *quickFeedServiceClient) CreateCriterion(ctx context.Context, req *connect.Request[qf.GradingCriterion]) (*connect.Response[qf.GradingCriterion], error) {
   638  	return c.createCriterion.CallUnary(ctx, req)
   639  }
   640  
   641  // UpdateCriterion calls qf.QuickFeedService.UpdateCriterion.
   642  func (c *quickFeedServiceClient) UpdateCriterion(ctx context.Context, req *connect.Request[qf.GradingCriterion]) (*connect.Response[qf.Void], error) {
   643  	return c.updateCriterion.CallUnary(ctx, req)
   644  }
   645  
   646  // DeleteCriterion calls qf.QuickFeedService.DeleteCriterion.
   647  func (c *quickFeedServiceClient) DeleteCriterion(ctx context.Context, req *connect.Request[qf.GradingCriterion]) (*connect.Response[qf.Void], error) {
   648  	return c.deleteCriterion.CallUnary(ctx, req)
   649  }
   650  
   651  // CreateReview calls qf.QuickFeedService.CreateReview.
   652  func (c *quickFeedServiceClient) CreateReview(ctx context.Context, req *connect.Request[qf.ReviewRequest]) (*connect.Response[qf.Review], error) {
   653  	return c.createReview.CallUnary(ctx, req)
   654  }
   655  
   656  // UpdateReview calls qf.QuickFeedService.UpdateReview.
   657  func (c *quickFeedServiceClient) UpdateReview(ctx context.Context, req *connect.Request[qf.ReviewRequest]) (*connect.Response[qf.Review], error) {
   658  	return c.updateReview.CallUnary(ctx, req)
   659  }
   660  
   661  // GetOrganization calls qf.QuickFeedService.GetOrganization.
   662  func (c *quickFeedServiceClient) GetOrganization(ctx context.Context, req *connect.Request[qf.Organization]) (*connect.Response[qf.Organization], error) {
   663  	return c.getOrganization.CallUnary(ctx, req)
   664  }
   665  
   666  // GetRepositories calls qf.QuickFeedService.GetRepositories.
   667  func (c *quickFeedServiceClient) GetRepositories(ctx context.Context, req *connect.Request[qf.CourseRequest]) (*connect.Response[qf.Repositories], error) {
   668  	return c.getRepositories.CallUnary(ctx, req)
   669  }
   670  
   671  // IsEmptyRepo calls qf.QuickFeedService.IsEmptyRepo.
   672  func (c *quickFeedServiceClient) IsEmptyRepo(ctx context.Context, req *connect.Request[qf.RepositoryRequest]) (*connect.Response[qf.Void], error) {
   673  	return c.isEmptyRepo.CallUnary(ctx, req)
   674  }
   675  
   676  // SubmissionStream calls qf.QuickFeedService.SubmissionStream.
   677  func (c *quickFeedServiceClient) SubmissionStream(ctx context.Context, req *connect.Request[qf.Void]) (*connect.ServerStreamForClient[qf.Submission], error) {
   678  	return c.submissionStream.CallServerStream(ctx, req)
   679  }
   680  
   681  // QuickFeedServiceHandler is an implementation of the qf.QuickFeedService service.
   682  type QuickFeedServiceHandler interface {
   683  	GetUser(context.Context, *connect.Request[qf.Void]) (*connect.Response[qf.User], error)
   684  	GetUsers(context.Context, *connect.Request[qf.Void]) (*connect.Response[qf.Users], error)
   685  	UpdateUser(context.Context, *connect.Request[qf.User]) (*connect.Response[qf.Void], error)
   686  	// GetGroup returns a group with the given group ID or user ID. Course ID is required.
   687  	GetGroup(context.Context, *connect.Request[qf.GroupRequest]) (*connect.Response[qf.Group], error)
   688  	GetGroupsByCourse(context.Context, *connect.Request[qf.CourseRequest]) (*connect.Response[qf.Groups], error)
   689  	CreateGroup(context.Context, *connect.Request[qf.Group]) (*connect.Response[qf.Group], error)
   690  	UpdateGroup(context.Context, *connect.Request[qf.Group]) (*connect.Response[qf.Group], error)
   691  	DeleteGroup(context.Context, *connect.Request[qf.GroupRequest]) (*connect.Response[qf.Void], error)
   692  	GetCourse(context.Context, *connect.Request[qf.CourseRequest]) (*connect.Response[qf.Course], error)
   693  	GetCourses(context.Context, *connect.Request[qf.Void]) (*connect.Response[qf.Courses], error)
   694  	CreateCourse(context.Context, *connect.Request[qf.Course]) (*connect.Response[qf.Course], error)
   695  	UpdateCourse(context.Context, *connect.Request[qf.Course]) (*connect.Response[qf.Void], error)
   696  	UpdateCourseVisibility(context.Context, *connect.Request[qf.Enrollment]) (*connect.Response[qf.Void], error)
   697  	GetAssignments(context.Context, *connect.Request[qf.CourseRequest]) (*connect.Response[qf.Assignments], error)
   698  	UpdateAssignments(context.Context, *connect.Request[qf.CourseRequest]) (*connect.Response[qf.Void], error)
   699  	GetEnrollments(context.Context, *connect.Request[qf.EnrollmentRequest]) (*connect.Response[qf.Enrollments], error)
   700  	CreateEnrollment(context.Context, *connect.Request[qf.Enrollment]) (*connect.Response[qf.Void], error)
   701  	UpdateEnrollments(context.Context, *connect.Request[qf.Enrollments]) (*connect.Response[qf.Void], error)
   702  	GetSubmission(context.Context, *connect.Request[qf.SubmissionRequest]) (*connect.Response[qf.Submission], error)
   703  	// Get latest submissions for all course assignments for a user or a group.
   704  	GetSubmissions(context.Context, *connect.Request[qf.SubmissionRequest]) (*connect.Response[qf.Submissions], error)
   705  	// Get lab submissions for every course user or every course group
   706  	GetSubmissionsByCourse(context.Context, *connect.Request[qf.SubmissionRequest]) (*connect.Response[qf.CourseSubmissions], error)
   707  	UpdateSubmission(context.Context, *connect.Request[qf.UpdateSubmissionRequest]) (*connect.Response[qf.Void], error)
   708  	UpdateSubmissions(context.Context, *connect.Request[qf.UpdateSubmissionsRequest]) (*connect.Response[qf.Void], error)
   709  	RebuildSubmissions(context.Context, *connect.Request[qf.RebuildRequest]) (*connect.Response[qf.Void], error)
   710  	CreateBenchmark(context.Context, *connect.Request[qf.GradingBenchmark]) (*connect.Response[qf.GradingBenchmark], error)
   711  	UpdateBenchmark(context.Context, *connect.Request[qf.GradingBenchmark]) (*connect.Response[qf.Void], error)
   712  	DeleteBenchmark(context.Context, *connect.Request[qf.GradingBenchmark]) (*connect.Response[qf.Void], error)
   713  	CreateCriterion(context.Context, *connect.Request[qf.GradingCriterion]) (*connect.Response[qf.GradingCriterion], error)
   714  	UpdateCriterion(context.Context, *connect.Request[qf.GradingCriterion]) (*connect.Response[qf.Void], error)
   715  	DeleteCriterion(context.Context, *connect.Request[qf.GradingCriterion]) (*connect.Response[qf.Void], error)
   716  	CreateReview(context.Context, *connect.Request[qf.ReviewRequest]) (*connect.Response[qf.Review], error)
   717  	UpdateReview(context.Context, *connect.Request[qf.ReviewRequest]) (*connect.Response[qf.Review], error)
   718  	// GetOrganization returns the organization with the given organization name.
   719  	// Note that organization ID is not used in the request, but it is populated in the response.
   720  	GetOrganization(context.Context, *connect.Request[qf.Organization]) (*connect.Response[qf.Organization], error)
   721  	GetRepositories(context.Context, *connect.Request[qf.CourseRequest]) (*connect.Response[qf.Repositories], error)
   722  	IsEmptyRepo(context.Context, *connect.Request[qf.RepositoryRequest]) (*connect.Response[qf.Void], error)
   723  	SubmissionStream(context.Context, *connect.Request[qf.Void], *connect.ServerStream[qf.Submission]) error
   724  }
   725  
   726  // NewQuickFeedServiceHandler builds an HTTP handler from the service implementation. It returns the
   727  // path on which to mount the handler and the handler itself.
   728  //
   729  // By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf
   730  // and JSON codecs. They also support gzip compression.
   731  func NewQuickFeedServiceHandler(svc QuickFeedServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) {
   732  	quickFeedServiceGetUserHandler := connect.NewUnaryHandler(
   733  		QuickFeedServiceGetUserProcedure,
   734  		svc.GetUser,
   735  		connect.WithSchema(quickFeedServiceGetUserMethodDescriptor),
   736  		connect.WithHandlerOptions(opts...),
   737  	)
   738  	quickFeedServiceGetUsersHandler := connect.NewUnaryHandler(
   739  		QuickFeedServiceGetUsersProcedure,
   740  		svc.GetUsers,
   741  		connect.WithSchema(quickFeedServiceGetUsersMethodDescriptor),
   742  		connect.WithHandlerOptions(opts...),
   743  	)
   744  	quickFeedServiceUpdateUserHandler := connect.NewUnaryHandler(
   745  		QuickFeedServiceUpdateUserProcedure,
   746  		svc.UpdateUser,
   747  		connect.WithSchema(quickFeedServiceUpdateUserMethodDescriptor),
   748  		connect.WithHandlerOptions(opts...),
   749  	)
   750  	quickFeedServiceGetGroupHandler := connect.NewUnaryHandler(
   751  		QuickFeedServiceGetGroupProcedure,
   752  		svc.GetGroup,
   753  		connect.WithSchema(quickFeedServiceGetGroupMethodDescriptor),
   754  		connect.WithHandlerOptions(opts...),
   755  	)
   756  	quickFeedServiceGetGroupsByCourseHandler := connect.NewUnaryHandler(
   757  		QuickFeedServiceGetGroupsByCourseProcedure,
   758  		svc.GetGroupsByCourse,
   759  		connect.WithSchema(quickFeedServiceGetGroupsByCourseMethodDescriptor),
   760  		connect.WithHandlerOptions(opts...),
   761  	)
   762  	quickFeedServiceCreateGroupHandler := connect.NewUnaryHandler(
   763  		QuickFeedServiceCreateGroupProcedure,
   764  		svc.CreateGroup,
   765  		connect.WithSchema(quickFeedServiceCreateGroupMethodDescriptor),
   766  		connect.WithHandlerOptions(opts...),
   767  	)
   768  	quickFeedServiceUpdateGroupHandler := connect.NewUnaryHandler(
   769  		QuickFeedServiceUpdateGroupProcedure,
   770  		svc.UpdateGroup,
   771  		connect.WithSchema(quickFeedServiceUpdateGroupMethodDescriptor),
   772  		connect.WithHandlerOptions(opts...),
   773  	)
   774  	quickFeedServiceDeleteGroupHandler := connect.NewUnaryHandler(
   775  		QuickFeedServiceDeleteGroupProcedure,
   776  		svc.DeleteGroup,
   777  		connect.WithSchema(quickFeedServiceDeleteGroupMethodDescriptor),
   778  		connect.WithHandlerOptions(opts...),
   779  	)
   780  	quickFeedServiceGetCourseHandler := connect.NewUnaryHandler(
   781  		QuickFeedServiceGetCourseProcedure,
   782  		svc.GetCourse,
   783  		connect.WithSchema(quickFeedServiceGetCourseMethodDescriptor),
   784  		connect.WithHandlerOptions(opts...),
   785  	)
   786  	quickFeedServiceGetCoursesHandler := connect.NewUnaryHandler(
   787  		QuickFeedServiceGetCoursesProcedure,
   788  		svc.GetCourses,
   789  		connect.WithSchema(quickFeedServiceGetCoursesMethodDescriptor),
   790  		connect.WithHandlerOptions(opts...),
   791  	)
   792  	quickFeedServiceCreateCourseHandler := connect.NewUnaryHandler(
   793  		QuickFeedServiceCreateCourseProcedure,
   794  		svc.CreateCourse,
   795  		connect.WithSchema(quickFeedServiceCreateCourseMethodDescriptor),
   796  		connect.WithHandlerOptions(opts...),
   797  	)
   798  	quickFeedServiceUpdateCourseHandler := connect.NewUnaryHandler(
   799  		QuickFeedServiceUpdateCourseProcedure,
   800  		svc.UpdateCourse,
   801  		connect.WithSchema(quickFeedServiceUpdateCourseMethodDescriptor),
   802  		connect.WithHandlerOptions(opts...),
   803  	)
   804  	quickFeedServiceUpdateCourseVisibilityHandler := connect.NewUnaryHandler(
   805  		QuickFeedServiceUpdateCourseVisibilityProcedure,
   806  		svc.UpdateCourseVisibility,
   807  		connect.WithSchema(quickFeedServiceUpdateCourseVisibilityMethodDescriptor),
   808  		connect.WithHandlerOptions(opts...),
   809  	)
   810  	quickFeedServiceGetAssignmentsHandler := connect.NewUnaryHandler(
   811  		QuickFeedServiceGetAssignmentsProcedure,
   812  		svc.GetAssignments,
   813  		connect.WithSchema(quickFeedServiceGetAssignmentsMethodDescriptor),
   814  		connect.WithHandlerOptions(opts...),
   815  	)
   816  	quickFeedServiceUpdateAssignmentsHandler := connect.NewUnaryHandler(
   817  		QuickFeedServiceUpdateAssignmentsProcedure,
   818  		svc.UpdateAssignments,
   819  		connect.WithSchema(quickFeedServiceUpdateAssignmentsMethodDescriptor),
   820  		connect.WithHandlerOptions(opts...),
   821  	)
   822  	quickFeedServiceGetEnrollmentsHandler := connect.NewUnaryHandler(
   823  		QuickFeedServiceGetEnrollmentsProcedure,
   824  		svc.GetEnrollments,
   825  		connect.WithSchema(quickFeedServiceGetEnrollmentsMethodDescriptor),
   826  		connect.WithHandlerOptions(opts...),
   827  	)
   828  	quickFeedServiceCreateEnrollmentHandler := connect.NewUnaryHandler(
   829  		QuickFeedServiceCreateEnrollmentProcedure,
   830  		svc.CreateEnrollment,
   831  		connect.WithSchema(quickFeedServiceCreateEnrollmentMethodDescriptor),
   832  		connect.WithHandlerOptions(opts...),
   833  	)
   834  	quickFeedServiceUpdateEnrollmentsHandler := connect.NewUnaryHandler(
   835  		QuickFeedServiceUpdateEnrollmentsProcedure,
   836  		svc.UpdateEnrollments,
   837  		connect.WithSchema(quickFeedServiceUpdateEnrollmentsMethodDescriptor),
   838  		connect.WithHandlerOptions(opts...),
   839  	)
   840  	quickFeedServiceGetSubmissionHandler := connect.NewUnaryHandler(
   841  		QuickFeedServiceGetSubmissionProcedure,
   842  		svc.GetSubmission,
   843  		connect.WithSchema(quickFeedServiceGetSubmissionMethodDescriptor),
   844  		connect.WithHandlerOptions(opts...),
   845  	)
   846  	quickFeedServiceGetSubmissionsHandler := connect.NewUnaryHandler(
   847  		QuickFeedServiceGetSubmissionsProcedure,
   848  		svc.GetSubmissions,
   849  		connect.WithSchema(quickFeedServiceGetSubmissionsMethodDescriptor),
   850  		connect.WithHandlerOptions(opts...),
   851  	)
   852  	quickFeedServiceGetSubmissionsByCourseHandler := connect.NewUnaryHandler(
   853  		QuickFeedServiceGetSubmissionsByCourseProcedure,
   854  		svc.GetSubmissionsByCourse,
   855  		connect.WithSchema(quickFeedServiceGetSubmissionsByCourseMethodDescriptor),
   856  		connect.WithHandlerOptions(opts...),
   857  	)
   858  	quickFeedServiceUpdateSubmissionHandler := connect.NewUnaryHandler(
   859  		QuickFeedServiceUpdateSubmissionProcedure,
   860  		svc.UpdateSubmission,
   861  		connect.WithSchema(quickFeedServiceUpdateSubmissionMethodDescriptor),
   862  		connect.WithHandlerOptions(opts...),
   863  	)
   864  	quickFeedServiceUpdateSubmissionsHandler := connect.NewUnaryHandler(
   865  		QuickFeedServiceUpdateSubmissionsProcedure,
   866  		svc.UpdateSubmissions,
   867  		connect.WithSchema(quickFeedServiceUpdateSubmissionsMethodDescriptor),
   868  		connect.WithHandlerOptions(opts...),
   869  	)
   870  	quickFeedServiceRebuildSubmissionsHandler := connect.NewUnaryHandler(
   871  		QuickFeedServiceRebuildSubmissionsProcedure,
   872  		svc.RebuildSubmissions,
   873  		connect.WithSchema(quickFeedServiceRebuildSubmissionsMethodDescriptor),
   874  		connect.WithHandlerOptions(opts...),
   875  	)
   876  	quickFeedServiceCreateBenchmarkHandler := connect.NewUnaryHandler(
   877  		QuickFeedServiceCreateBenchmarkProcedure,
   878  		svc.CreateBenchmark,
   879  		connect.WithSchema(quickFeedServiceCreateBenchmarkMethodDescriptor),
   880  		connect.WithHandlerOptions(opts...),
   881  	)
   882  	quickFeedServiceUpdateBenchmarkHandler := connect.NewUnaryHandler(
   883  		QuickFeedServiceUpdateBenchmarkProcedure,
   884  		svc.UpdateBenchmark,
   885  		connect.WithSchema(quickFeedServiceUpdateBenchmarkMethodDescriptor),
   886  		connect.WithHandlerOptions(opts...),
   887  	)
   888  	quickFeedServiceDeleteBenchmarkHandler := connect.NewUnaryHandler(
   889  		QuickFeedServiceDeleteBenchmarkProcedure,
   890  		svc.DeleteBenchmark,
   891  		connect.WithSchema(quickFeedServiceDeleteBenchmarkMethodDescriptor),
   892  		connect.WithHandlerOptions(opts...),
   893  	)
   894  	quickFeedServiceCreateCriterionHandler := connect.NewUnaryHandler(
   895  		QuickFeedServiceCreateCriterionProcedure,
   896  		svc.CreateCriterion,
   897  		connect.WithSchema(quickFeedServiceCreateCriterionMethodDescriptor),
   898  		connect.WithHandlerOptions(opts...),
   899  	)
   900  	quickFeedServiceUpdateCriterionHandler := connect.NewUnaryHandler(
   901  		QuickFeedServiceUpdateCriterionProcedure,
   902  		svc.UpdateCriterion,
   903  		connect.WithSchema(quickFeedServiceUpdateCriterionMethodDescriptor),
   904  		connect.WithHandlerOptions(opts...),
   905  	)
   906  	quickFeedServiceDeleteCriterionHandler := connect.NewUnaryHandler(
   907  		QuickFeedServiceDeleteCriterionProcedure,
   908  		svc.DeleteCriterion,
   909  		connect.WithSchema(quickFeedServiceDeleteCriterionMethodDescriptor),
   910  		connect.WithHandlerOptions(opts...),
   911  	)
   912  	quickFeedServiceCreateReviewHandler := connect.NewUnaryHandler(
   913  		QuickFeedServiceCreateReviewProcedure,
   914  		svc.CreateReview,
   915  		connect.WithSchema(quickFeedServiceCreateReviewMethodDescriptor),
   916  		connect.WithHandlerOptions(opts...),
   917  	)
   918  	quickFeedServiceUpdateReviewHandler := connect.NewUnaryHandler(
   919  		QuickFeedServiceUpdateReviewProcedure,
   920  		svc.UpdateReview,
   921  		connect.WithSchema(quickFeedServiceUpdateReviewMethodDescriptor),
   922  		connect.WithHandlerOptions(opts...),
   923  	)
   924  	quickFeedServiceGetOrganizationHandler := connect.NewUnaryHandler(
   925  		QuickFeedServiceGetOrganizationProcedure,
   926  		svc.GetOrganization,
   927  		connect.WithSchema(quickFeedServiceGetOrganizationMethodDescriptor),
   928  		connect.WithHandlerOptions(opts...),
   929  	)
   930  	quickFeedServiceGetRepositoriesHandler := connect.NewUnaryHandler(
   931  		QuickFeedServiceGetRepositoriesProcedure,
   932  		svc.GetRepositories,
   933  		connect.WithSchema(quickFeedServiceGetRepositoriesMethodDescriptor),
   934  		connect.WithHandlerOptions(opts...),
   935  	)
   936  	quickFeedServiceIsEmptyRepoHandler := connect.NewUnaryHandler(
   937  		QuickFeedServiceIsEmptyRepoProcedure,
   938  		svc.IsEmptyRepo,
   939  		connect.WithSchema(quickFeedServiceIsEmptyRepoMethodDescriptor),
   940  		connect.WithHandlerOptions(opts...),
   941  	)
   942  	quickFeedServiceSubmissionStreamHandler := connect.NewServerStreamHandler(
   943  		QuickFeedServiceSubmissionStreamProcedure,
   944  		svc.SubmissionStream,
   945  		connect.WithSchema(quickFeedServiceSubmissionStreamMethodDescriptor),
   946  		connect.WithHandlerOptions(opts...),
   947  	)
   948  	return "/qf.QuickFeedService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
   949  		switch r.URL.Path {
   950  		case QuickFeedServiceGetUserProcedure:
   951  			quickFeedServiceGetUserHandler.ServeHTTP(w, r)
   952  		case QuickFeedServiceGetUsersProcedure:
   953  			quickFeedServiceGetUsersHandler.ServeHTTP(w, r)
   954  		case QuickFeedServiceUpdateUserProcedure:
   955  			quickFeedServiceUpdateUserHandler.ServeHTTP(w, r)
   956  		case QuickFeedServiceGetGroupProcedure:
   957  			quickFeedServiceGetGroupHandler.ServeHTTP(w, r)
   958  		case QuickFeedServiceGetGroupsByCourseProcedure:
   959  			quickFeedServiceGetGroupsByCourseHandler.ServeHTTP(w, r)
   960  		case QuickFeedServiceCreateGroupProcedure:
   961  			quickFeedServiceCreateGroupHandler.ServeHTTP(w, r)
   962  		case QuickFeedServiceUpdateGroupProcedure:
   963  			quickFeedServiceUpdateGroupHandler.ServeHTTP(w, r)
   964  		case QuickFeedServiceDeleteGroupProcedure:
   965  			quickFeedServiceDeleteGroupHandler.ServeHTTP(w, r)
   966  		case QuickFeedServiceGetCourseProcedure:
   967  			quickFeedServiceGetCourseHandler.ServeHTTP(w, r)
   968  		case QuickFeedServiceGetCoursesProcedure:
   969  			quickFeedServiceGetCoursesHandler.ServeHTTP(w, r)
   970  		case QuickFeedServiceCreateCourseProcedure:
   971  			quickFeedServiceCreateCourseHandler.ServeHTTP(w, r)
   972  		case QuickFeedServiceUpdateCourseProcedure:
   973  			quickFeedServiceUpdateCourseHandler.ServeHTTP(w, r)
   974  		case QuickFeedServiceUpdateCourseVisibilityProcedure:
   975  			quickFeedServiceUpdateCourseVisibilityHandler.ServeHTTP(w, r)
   976  		case QuickFeedServiceGetAssignmentsProcedure:
   977  			quickFeedServiceGetAssignmentsHandler.ServeHTTP(w, r)
   978  		case QuickFeedServiceUpdateAssignmentsProcedure:
   979  			quickFeedServiceUpdateAssignmentsHandler.ServeHTTP(w, r)
   980  		case QuickFeedServiceGetEnrollmentsProcedure:
   981  			quickFeedServiceGetEnrollmentsHandler.ServeHTTP(w, r)
   982  		case QuickFeedServiceCreateEnrollmentProcedure:
   983  			quickFeedServiceCreateEnrollmentHandler.ServeHTTP(w, r)
   984  		case QuickFeedServiceUpdateEnrollmentsProcedure:
   985  			quickFeedServiceUpdateEnrollmentsHandler.ServeHTTP(w, r)
   986  		case QuickFeedServiceGetSubmissionProcedure:
   987  			quickFeedServiceGetSubmissionHandler.ServeHTTP(w, r)
   988  		case QuickFeedServiceGetSubmissionsProcedure:
   989  			quickFeedServiceGetSubmissionsHandler.ServeHTTP(w, r)
   990  		case QuickFeedServiceGetSubmissionsByCourseProcedure:
   991  			quickFeedServiceGetSubmissionsByCourseHandler.ServeHTTP(w, r)
   992  		case QuickFeedServiceUpdateSubmissionProcedure:
   993  			quickFeedServiceUpdateSubmissionHandler.ServeHTTP(w, r)
   994  		case QuickFeedServiceUpdateSubmissionsProcedure:
   995  			quickFeedServiceUpdateSubmissionsHandler.ServeHTTP(w, r)
   996  		case QuickFeedServiceRebuildSubmissionsProcedure:
   997  			quickFeedServiceRebuildSubmissionsHandler.ServeHTTP(w, r)
   998  		case QuickFeedServiceCreateBenchmarkProcedure:
   999  			quickFeedServiceCreateBenchmarkHandler.ServeHTTP(w, r)
  1000  		case QuickFeedServiceUpdateBenchmarkProcedure:
  1001  			quickFeedServiceUpdateBenchmarkHandler.ServeHTTP(w, r)
  1002  		case QuickFeedServiceDeleteBenchmarkProcedure:
  1003  			quickFeedServiceDeleteBenchmarkHandler.ServeHTTP(w, r)
  1004  		case QuickFeedServiceCreateCriterionProcedure:
  1005  			quickFeedServiceCreateCriterionHandler.ServeHTTP(w, r)
  1006  		case QuickFeedServiceUpdateCriterionProcedure:
  1007  			quickFeedServiceUpdateCriterionHandler.ServeHTTP(w, r)
  1008  		case QuickFeedServiceDeleteCriterionProcedure:
  1009  			quickFeedServiceDeleteCriterionHandler.ServeHTTP(w, r)
  1010  		case QuickFeedServiceCreateReviewProcedure:
  1011  			quickFeedServiceCreateReviewHandler.ServeHTTP(w, r)
  1012  		case QuickFeedServiceUpdateReviewProcedure:
  1013  			quickFeedServiceUpdateReviewHandler.ServeHTTP(w, r)
  1014  		case QuickFeedServiceGetOrganizationProcedure:
  1015  			quickFeedServiceGetOrganizationHandler.ServeHTTP(w, r)
  1016  		case QuickFeedServiceGetRepositoriesProcedure:
  1017  			quickFeedServiceGetRepositoriesHandler.ServeHTTP(w, r)
  1018  		case QuickFeedServiceIsEmptyRepoProcedure:
  1019  			quickFeedServiceIsEmptyRepoHandler.ServeHTTP(w, r)
  1020  		case QuickFeedServiceSubmissionStreamProcedure:
  1021  			quickFeedServiceSubmissionStreamHandler.ServeHTTP(w, r)
  1022  		default:
  1023  			http.NotFound(w, r)
  1024  		}
  1025  	})
  1026  }
  1027  
  1028  // UnimplementedQuickFeedServiceHandler returns CodeUnimplemented from all methods.
  1029  type UnimplementedQuickFeedServiceHandler struct{}
  1030  
  1031  func (UnimplementedQuickFeedServiceHandler) GetUser(context.Context, *connect.Request[qf.Void]) (*connect.Response[qf.User], error) {
  1032  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.GetUser is not implemented"))
  1033  }
  1034  
  1035  func (UnimplementedQuickFeedServiceHandler) GetUsers(context.Context, *connect.Request[qf.Void]) (*connect.Response[qf.Users], error) {
  1036  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.GetUsers is not implemented"))
  1037  }
  1038  
  1039  func (UnimplementedQuickFeedServiceHandler) UpdateUser(context.Context, *connect.Request[qf.User]) (*connect.Response[qf.Void], error) {
  1040  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.UpdateUser is not implemented"))
  1041  }
  1042  
  1043  func (UnimplementedQuickFeedServiceHandler) GetGroup(context.Context, *connect.Request[qf.GroupRequest]) (*connect.Response[qf.Group], error) {
  1044  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.GetGroup is not implemented"))
  1045  }
  1046  
  1047  func (UnimplementedQuickFeedServiceHandler) GetGroupsByCourse(context.Context, *connect.Request[qf.CourseRequest]) (*connect.Response[qf.Groups], error) {
  1048  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.GetGroupsByCourse is not implemented"))
  1049  }
  1050  
  1051  func (UnimplementedQuickFeedServiceHandler) CreateGroup(context.Context, *connect.Request[qf.Group]) (*connect.Response[qf.Group], error) {
  1052  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.CreateGroup is not implemented"))
  1053  }
  1054  
  1055  func (UnimplementedQuickFeedServiceHandler) UpdateGroup(context.Context, *connect.Request[qf.Group]) (*connect.Response[qf.Group], error) {
  1056  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.UpdateGroup is not implemented"))
  1057  }
  1058  
  1059  func (UnimplementedQuickFeedServiceHandler) DeleteGroup(context.Context, *connect.Request[qf.GroupRequest]) (*connect.Response[qf.Void], error) {
  1060  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.DeleteGroup is not implemented"))
  1061  }
  1062  
  1063  func (UnimplementedQuickFeedServiceHandler) GetCourse(context.Context, *connect.Request[qf.CourseRequest]) (*connect.Response[qf.Course], error) {
  1064  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.GetCourse is not implemented"))
  1065  }
  1066  
  1067  func (UnimplementedQuickFeedServiceHandler) GetCourses(context.Context, *connect.Request[qf.Void]) (*connect.Response[qf.Courses], error) {
  1068  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.GetCourses is not implemented"))
  1069  }
  1070  
  1071  func (UnimplementedQuickFeedServiceHandler) CreateCourse(context.Context, *connect.Request[qf.Course]) (*connect.Response[qf.Course], error) {
  1072  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.CreateCourse is not implemented"))
  1073  }
  1074  
  1075  func (UnimplementedQuickFeedServiceHandler) UpdateCourse(context.Context, *connect.Request[qf.Course]) (*connect.Response[qf.Void], error) {
  1076  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.UpdateCourse is not implemented"))
  1077  }
  1078  
  1079  func (UnimplementedQuickFeedServiceHandler) UpdateCourseVisibility(context.Context, *connect.Request[qf.Enrollment]) (*connect.Response[qf.Void], error) {
  1080  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.UpdateCourseVisibility is not implemented"))
  1081  }
  1082  
  1083  func (UnimplementedQuickFeedServiceHandler) GetAssignments(context.Context, *connect.Request[qf.CourseRequest]) (*connect.Response[qf.Assignments], error) {
  1084  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.GetAssignments is not implemented"))
  1085  }
  1086  
  1087  func (UnimplementedQuickFeedServiceHandler) UpdateAssignments(context.Context, *connect.Request[qf.CourseRequest]) (*connect.Response[qf.Void], error) {
  1088  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.UpdateAssignments is not implemented"))
  1089  }
  1090  
  1091  func (UnimplementedQuickFeedServiceHandler) GetEnrollments(context.Context, *connect.Request[qf.EnrollmentRequest]) (*connect.Response[qf.Enrollments], error) {
  1092  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.GetEnrollments is not implemented"))
  1093  }
  1094  
  1095  func (UnimplementedQuickFeedServiceHandler) CreateEnrollment(context.Context, *connect.Request[qf.Enrollment]) (*connect.Response[qf.Void], error) {
  1096  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.CreateEnrollment is not implemented"))
  1097  }
  1098  
  1099  func (UnimplementedQuickFeedServiceHandler) UpdateEnrollments(context.Context, *connect.Request[qf.Enrollments]) (*connect.Response[qf.Void], error) {
  1100  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.UpdateEnrollments is not implemented"))
  1101  }
  1102  
  1103  func (UnimplementedQuickFeedServiceHandler) GetSubmission(context.Context, *connect.Request[qf.SubmissionRequest]) (*connect.Response[qf.Submission], error) {
  1104  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.GetSubmission is not implemented"))
  1105  }
  1106  
  1107  func (UnimplementedQuickFeedServiceHandler) GetSubmissions(context.Context, *connect.Request[qf.SubmissionRequest]) (*connect.Response[qf.Submissions], error) {
  1108  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.GetSubmissions is not implemented"))
  1109  }
  1110  
  1111  func (UnimplementedQuickFeedServiceHandler) GetSubmissionsByCourse(context.Context, *connect.Request[qf.SubmissionRequest]) (*connect.Response[qf.CourseSubmissions], error) {
  1112  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.GetSubmissionsByCourse is not implemented"))
  1113  }
  1114  
  1115  func (UnimplementedQuickFeedServiceHandler) UpdateSubmission(context.Context, *connect.Request[qf.UpdateSubmissionRequest]) (*connect.Response[qf.Void], error) {
  1116  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.UpdateSubmission is not implemented"))
  1117  }
  1118  
  1119  func (UnimplementedQuickFeedServiceHandler) UpdateSubmissions(context.Context, *connect.Request[qf.UpdateSubmissionsRequest]) (*connect.Response[qf.Void], error) {
  1120  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.UpdateSubmissions is not implemented"))
  1121  }
  1122  
  1123  func (UnimplementedQuickFeedServiceHandler) RebuildSubmissions(context.Context, *connect.Request[qf.RebuildRequest]) (*connect.Response[qf.Void], error) {
  1124  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.RebuildSubmissions is not implemented"))
  1125  }
  1126  
  1127  func (UnimplementedQuickFeedServiceHandler) CreateBenchmark(context.Context, *connect.Request[qf.GradingBenchmark]) (*connect.Response[qf.GradingBenchmark], error) {
  1128  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.CreateBenchmark is not implemented"))
  1129  }
  1130  
  1131  func (UnimplementedQuickFeedServiceHandler) UpdateBenchmark(context.Context, *connect.Request[qf.GradingBenchmark]) (*connect.Response[qf.Void], error) {
  1132  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.UpdateBenchmark is not implemented"))
  1133  }
  1134  
  1135  func (UnimplementedQuickFeedServiceHandler) DeleteBenchmark(context.Context, *connect.Request[qf.GradingBenchmark]) (*connect.Response[qf.Void], error) {
  1136  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.DeleteBenchmark is not implemented"))
  1137  }
  1138  
  1139  func (UnimplementedQuickFeedServiceHandler) CreateCriterion(context.Context, *connect.Request[qf.GradingCriterion]) (*connect.Response[qf.GradingCriterion], error) {
  1140  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.CreateCriterion is not implemented"))
  1141  }
  1142  
  1143  func (UnimplementedQuickFeedServiceHandler) UpdateCriterion(context.Context, *connect.Request[qf.GradingCriterion]) (*connect.Response[qf.Void], error) {
  1144  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.UpdateCriterion is not implemented"))
  1145  }
  1146  
  1147  func (UnimplementedQuickFeedServiceHandler) DeleteCriterion(context.Context, *connect.Request[qf.GradingCriterion]) (*connect.Response[qf.Void], error) {
  1148  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.DeleteCriterion is not implemented"))
  1149  }
  1150  
  1151  func (UnimplementedQuickFeedServiceHandler) CreateReview(context.Context, *connect.Request[qf.ReviewRequest]) (*connect.Response[qf.Review], error) {
  1152  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.CreateReview is not implemented"))
  1153  }
  1154  
  1155  func (UnimplementedQuickFeedServiceHandler) UpdateReview(context.Context, *connect.Request[qf.ReviewRequest]) (*connect.Response[qf.Review], error) {
  1156  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.UpdateReview is not implemented"))
  1157  }
  1158  
  1159  func (UnimplementedQuickFeedServiceHandler) GetOrganization(context.Context, *connect.Request[qf.Organization]) (*connect.Response[qf.Organization], error) {
  1160  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.GetOrganization is not implemented"))
  1161  }
  1162  
  1163  func (UnimplementedQuickFeedServiceHandler) GetRepositories(context.Context, *connect.Request[qf.CourseRequest]) (*connect.Response[qf.Repositories], error) {
  1164  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.GetRepositories is not implemented"))
  1165  }
  1166  
  1167  func (UnimplementedQuickFeedServiceHandler) IsEmptyRepo(context.Context, *connect.Request[qf.RepositoryRequest]) (*connect.Response[qf.Void], error) {
  1168  	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.IsEmptyRepo is not implemented"))
  1169  }
  1170  
  1171  func (UnimplementedQuickFeedServiceHandler) SubmissionStream(context.Context, *connect.Request[qf.Void], *connect.ServerStream[qf.Submission]) error {
  1172  	return connect.NewError(connect.CodeUnimplemented, errors.New("qf.QuickFeedService.SubmissionStream is not implemented"))
  1173  }