 (s/defschema Tool
   "See http://stixproject.github.io/data-model/1.2/cyboxCommon/ToolInformationType/"
   {:description s/Str
-   (s/optional-key :type) [v/AttackToolType]
-   (s/optional-key :references) [s/Str]
-   (s/optional-key :vendor) s/Str
-   (s/optional-key :version) s/Str
-   (s/optional-key :service_pack) s/Str
+   (s/optional-key :type)
+   (describe [v/AttackToolType] "type of the tool leveraged")
+   (s/optional-key :references)
+   (describe [s/Str] "references to instances or additional information for this tool")
+   (s/optional-key :vendor)
+   (describe s/Str "information identifying the vendor organization for this tool")
+   (s/optional-key :version)
+   (describe s/Str "version descriptor of this tool")
+   (s/optional-key :service_pack)
+   (describe s/Str "service pack descriptor for this tool")
    ;; Not provided: tool_specific_data
    ;; Not provided: tool_hashes
    ;; Not provided: tool_configuration


(s/defschema Contributor
  "See http://stixproject.github.io/data-model/1.2/cyboxCommon/ContributorType/"
  {(s/optional-key :role) s/Str
   (s/optional-key :name) s/Str
   (s/optional-key :email) s/Str
   (s/optional-key :phone) s/Str
   (s/optional-key :organization) s/Str
   (s/optional-key :date) Time
   (s/optional-key :contribution_location) s/Str})

(s/defschema RelatedIdentity
  "See http://stixproject.github.io/data-model/1.2/stixCommon/RelatedIdentityType/"
  {(s/optional-key :confidence) v/HighMedLow
   (s/optional-key :information_source) s/Str
   (s/optional-key :relationship) s/Str ;; empty vocab
   :identity Reference ;; Points to Identity
   })

(s/defschema Identity
  "See http://stixproject.github.io/data-model/1.2/stixCommon/IdentityType/"
  {:description s/Str
   :related_identities [RelatedIdentity]})

(s/defschema Activity
  "See http://stixproject.github.io/data-model/1.2/stixCommon/ActivityType/"
  {:date_time Time
   :description s/Str})

(s/defschema Observable
  "A simple, atomic value which has a consistent identity, and is

            [clj-time.core :as time]
            [clj-time.format :as time-format]
            [ring.util.http-response :as http-response]
            [ring.swagger.schema :refer [describe]]
            [schema.core :as s]))

(def Reference
