I would probably do it like this:
(org-element-map (org-element-parse-buffer) 'link
(lambda (lnk)
(let ((lnkplist '()))
(setq lnkplist (plist-put lnkplist :link (org-element-property :raw-link lnk)))
(when (org-element-property :contents-begin lnk)
(setq lnkplist (plist-put lnkplist :desc (buffer-substring-no-properties
(org-element-property :contents-begin lnk)
(org-element-property :contents-end lnk)))))
lnkplist)))
John
-----------------------------------
Professor John Kitchin (he/him/his)
Doherty Hall A207F
Department of Chemical Engineering
Carnegie Mellon University
Pittsburgh, PA 15213
412-268-7803