Migration to AGL gerrit (update go import)
[src/xds/xds-server.git] / lib / xsapiv1 / folders.go
1 /*
2  * Copyright (C) 2017-2018 "IoT.bzh"
3  * Author Sebastien Douheret <sebastien@iot.bzh>
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *   http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18 package xsapiv1
19
20 // FolderType definition
21 type FolderType string
22
23 const (
24         TypePathMap   = "PathMap"
25         TypeCloudSync = "CloudSync"
26         TypeCifsSmb   = "CIFS"
27 )
28
29 // Folder Status definition
30 const (
31         StatusErrorConfig = "ErrorConfig"
32         StatusDisable     = "Disable"
33         StatusEnable      = "Enable"
34         StatusPause       = "Pause"
35         StatusSyncing     = "Syncing"
36 )
37
38 // FolderConfig is the config for one folder
39 type FolderConfig struct {
40         ID         string     `json:"id"`
41         Label      string     `json:"label"`
42         ClientPath string     `json:"path"`
43         Type       FolderType `json:"type"`
44         Status     string     `json:"status"`
45         IsInSync   bool       `json:"isInSync"`
46         DefaultSdk string     `json:"defaultSdk"`
47         ClientData string     `json:"clientData"` // free form field that can used by client
48
49         // Not exported fields from REST API point of view
50         RootPath string `json:"-"`
51
52         // FIXME: better to define an equivalent to union data and then implement
53         // UnmarshalJSON/MarshalJSON to decode/encode according to Type value
54         // Data interface{} `json:"data"`
55
56         // Specific data depending on which Type is used
57         DataPathMap   PathMapConfig   `json:"dataPathMap,omitempty"`
58         DataCloudSync CloudSyncConfig `json:"dataCloudSync,omitempty"`
59 }
60
61 // FolderConfigUpdatableFields List fields that can be updated using Update function
62 var FolderConfigUpdatableFields = []string{
63         "Label", "DefaultSdk", "ClientData",
64 }
65
66 // PathMapConfig Path mapping specific data
67 type PathMapConfig struct {
68         ServerPath string `json:"serverPath"`
69
70         // Don't keep temporary file name (IOW we don't want to save it and reuse it)
71         CheckFile    string `json:"checkFile" xml:"-"`
72         CheckContent string `json:"checkContent" xml:"-"`
73 }
74
75 // CloudSyncConfig CloudSync (AKA Syncthing) specific data
76 type CloudSyncConfig struct {
77         SyncThingID string `json:"syncThingID"`
78
79         // Not exported fields (only used internally)
80         STSvrStatus   string `json:"-"`
81         STSvrIsInSync bool   `json:"-"`
82         STLocStatus   string `json:"-"`
83         STLocIsInSync bool   `json:"-"`
84 }