1 // Copyright 2022-2025 The sacloud/iaas-api-go Authors
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 15 package search
16 17 import "encoding/json"
18 19 // SortOrder ソート順
20 type SortOrder int
21 22 const (
23 // SortAsc 昇順(デフォルト)
24 SortAsc SortOrder = iota
25 // SortDesc 降順
26 SortDesc
27 )
28 29 // SortKeys ソート順指定
30 type SortKeys []SortKey
31 32 // SortKey ソート順指定対象のフィールド名
33 type SortKey struct {
34 Key string
35 Order SortOrder
36 }
37 38 // SortKeyAsc 昇順ソートキー
39 func SortKeyAsc(key string) SortKey {
40 return SortKey{
41 Key: key,
42 Order: SortAsc,
43 }
44 }
45 46 // SortKeyDesc 降順ソートキー
47 func SortKeyDesc(key string) SortKey {
48 return SortKey{
49 Key: key,
50 Order: SortDesc,
51 }
52 }
53 54 // MarshalJSON キーの文字列表現
55 func (k SortKey) MarshalJSON() ([]byte, error) {
56 s := k.Key
57 if k.Order == SortDesc {
58 s = "-" + k.Key
59 }
60 return json.Marshal(s)
61 }
62