Git Product home page Git Product logo

aip-go's Introduction

AIP Go

Go SDK for implementing Google API Improvement Proposals (AIP).

Documentation

See https://aip.dev for the full AIP documentation.

Installing

$ go get -u go.einride.tech/aip

Examples

AIP-132 (Standard method: List)

  • Use pagination.PageToken to implement offset-based pagination.

    package examplelibrary
    
    import (
    	"context"
    
    	"go.einride.tech/aip/pagination"
    	"google.golang.org/genproto/googleapis/example/library/v1"
    	"google.golang.org/grpc/codes"
    	"google.golang.org/grpc/status"
    )
    
    func (s *Server) ListShelves(
    	ctx context.Context,
    	request *library.ListShelvesRequest,
    ) (*library.ListShelvesResponse, error) {
    	// Handle request constraints.
    	const (
    		maxPageSize     = 1000
    		defaultPageSize = 100
    	)
    	switch {
    	case request.PageSize < 0:
    		return nil, status.Errorf(codes.InvalidArgument, "page size is negative")
    	case request.PageSize == 0:
    		request.PageSize = defaultPageSize
    	case request.PageSize > maxPageSize:
    		request.PageSize = maxPageSize
    	}
    	// Use pagination.PageToken for offset-based page tokens.
    	pageToken, err := pagination.ParsePageToken(request)
    	if err != nil {
    		return nil, status.Errorf(codes.InvalidArgument, "invalid page token")
    	}
    	// Query the storage.
    	result, err := s.Storage.ListShelves(ctx, &ListShelvesQuery{
    		Offset:   pageToken.Offset,
    		PageSize: request.GetPageSize(),
    	})
    	if err != nil {
    		return nil, err
    	}
    	// Build the response.
    	response := &library.ListShelvesResponse{
    		Shelves: result.Shelves,
    	}
    	// Set the next page token.
    	if result.HasNextPage {
    		response.NextPageToken = pageToken.Next(request).String()
    	}
    	// Respond.
    	return response, nil
    }

aip-go's People

Contributors

dependabot[bot] avatar edholm avatar ericwenn avatar odsod avatar saimanwong avatar soulplant avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.