Skip to content

Instantly share code, notes, and snippets.

View farzadshbfn's full-sized avatar

Farzad Sharbafian farzadshbfn

View GitHub Profile
struct CellNumber: Codable {
let digits: String
init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
let rawDigits = try container.decode(String.self)
// validate rawDigits by some Regex maybe? and throw appropriate errors?
// or extract CountryCode and AreaCode and save them in another way?
digits = rawDigits
}
extension User {
struct Profile {
let name: String
let lastName: String
let email: Email?
let isEmailVerified: Bool
}
}
extension User.Profile: Codable {
struct User {
typealias Id = String
let id: Id
let cellNumber: CellNumber
let status: Status
enum Status {
case notRegistered
case registered(profile: Profile)
// MARK:- User Helper methods
extension User {
var isRegistered: Bool {
return status.isRegistered
}
var profile: Profile? {
return status.profile
}
}
struct User: Codable {
typealias Id = String
let id: Id
let cellNumber: CellNumber
let status: Status
enum Status {
case notRegistered
@farzadshbfn
farzadshbfn / [email protected]
Created February 19, 2020 18:02 — forked from ffeu/[email protected]
clang-format version 8 (8.0.0) formula for brew (check comment below on how to install it)
class ClangFormatAT8 < Formula
desc "Formatting tool for C/C++/Java/JavaScript/Objective-C/Protobuf"
homepage "https://releases.llvm.org/8.0.0/tools/clang/docs/ClangFormat.html"
version "8.0.0"
if MacOS.version >= :sierra
url "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_800/final/", :using => :svn
else
url "http://llvm.org/svn/llvm-project/llvm/tags/RELEASE_800/final/", :using => :svn
end