-
Notifications
You must be signed in to change notification settings - Fork 2.9k
/
FxBookmarkNode.swift
38 lines (31 loc) · 1.17 KB
/
FxBookmarkNode.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/
import MozillaAppServices
import Storage
// Provides a layer of abstraction so we have more power over BookmarkNodeData provided by App Services.
// For instance, this enables us to have the LocalDesktopFolder.
protocol FxBookmarkNode {
var type: BookmarkNodeType { get }
var guid: String { get }
var parentGUID: String? { get }
var position: UInt32 { get }
var isRoot: Bool { get }
var title: String { get }
}
extension FxBookmarkNode {
var isNonEmptyFolder: Bool {
guard let bookmarkFolder = self as? BookmarkFolderData else { return false }
return !bookmarkFolder.childGUIDs.isEmpty
}
}
extension BookmarkItemData: FxBookmarkNode {}
extension BookmarkFolderData: FxBookmarkNode {
// Convenience to be able to fetch children as an array of FxBookmarkNode
var fxChildren: [FxBookmarkNode]? {
return self.children as? [FxBookmarkNode]
}
}
extension BookmarkSeparatorData: FxBookmarkNode {
var title: String { "" }
}