o
    6d&                     @   s   d dl mZmZmZmZ d dlmZ d dlmZm	Z	m
Z
mZmZmZmZmZ d dlmZ d dlmZmZmZmZ dZdeZdZd	ZG d
d deZdS )    )absolute_importdivisionprint_functionunicode_literals)contextmanager)is_list_typeis_map_typeis_struct_typeis_union_typeis_nullable_typeis_user_defined_typeis_void_typeunwrap_nullable)CodeBackend)fmt_camel_upper	fmt_classfmt_class_prefix
fmt_importzs///
/// Copyright (c) 2016 Dropbox, Inc. All rights reserved.
///
/// Auto-generated by Stone, do not modify.
///

z{}z(no description).z/// c                   @   s   e Zd ZdZedd Zed$ddZe			d%ddZed	d
 Ze		d&ddZ	dd Z
dd Zdd Zdd Zdd Z		d'ddZdd Zdd Zd d! Zd"d# ZdS )(ObjCBaseBackendz3Wrapper class over Stone generator for Obj C logic.c                 c   sL    | j d|ddd |   d V  W d    d S 1 sw   Y  d S )Nz@implementation {} z@endr   delimZdent)blockformatemit)self
class_name r   kC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\site-packages\stone/backends/obj_c.pyblock_m,   s   "zObjCBaseBackend.block_mNc                 c   s    t |sJ dt| |s=g }|jr!t|r!|t|j nt|r+|d n|d |r:dd|nd}n|jrIt|sIt|jnd}d|d|}| j	dt||dd	d
 | 
  d V  W d    d S 1 suw   Y  d S )Nz"Expected user-defined type, got %rNSObject : {}, r   
 : {} <{}>@interface {}{}r   r   r   )r   typeparent_typer	   appendr   r
   r   joinr   r   )r   	data_typeprotocol
extensionsextend_suffixbaser   r   r   block_h_from_data_type5   sD   


"z&ObjCBaseBackend.block_h_from_data_typec           	   	   c   s    |sdg}|sd d|}nd d|t|}|r dnd}| j| ||ddd	C |rb| jd
dd | d |D ]\}}| d || q@W d    n1 sXw   Y  | d |   d V  W d    d S 1 stw   Y  d S )Nr!   r"   r#   r$   z@interface {}{} {{r%   r   r   r   r   )r   r   )r   z
@protectedz{} _{};})r   r)   r   r   r   )	r   r   r+   r,   Z	protectedr-   Zbase_interface_str
field_nameZ
field_typer   r   r   block_hT   s2   


"zObjCBaseBackend.block_hc                 c   s@    |  d d V  W d    n1 sw   Y  | d d S )Nz	if (self)zreturn self;)r   r   )r   r   r   r   
block_initq   s
   zObjCBaseBackend.block_initvoidFc                 c   sp    |d ur|ng }|sdnd}|rdnd}| ||||}| | d V  W d    d S 1 s1w   Y  d S )N-+z{} ({}){}:{}z	{} ({}){})r   r   )r   funcargsreturn_typeZ
class_funcmodifierZbase_string	signaturer   r   r   
block_funcw   s   "zObjCBaseBackend.block_funcc                 C   s   t |ts|g}|}|D ]^}|t| |jr |t|j t|r8| r8| D ]\}}|t| q,|jD ].}t	|j
\}}t|sLt|r^t|rS|jn|j
}t|sLt|sLt|ri|t| q;q|rwtt|}|  |S )zNEmits all necessary implementation file imports for the given Stone data type.)
isinstancelistr(   r   r'   r	   Zhas_enumerated_subtypesZget_all_subtypes_with_tags
all_fieldsr   r*   r   r   value_data_typer   setsort)r   
data_typesZdefault_importsimport_classesr*   _subtypefieldr   r   r   _get_imports_m   s<   

zObjCBaseBackend._get_imports_mc                 C   s   t |ts|g}g }|D ]?}t|r|t| |jD ].}t|j\}}t|s-t	|r?t	|r4|j
n|j}t|s-t	|s-t|rJ|t| qqtt|}|  |S )zFEmits all necessary header file imports for the given Stone data type.)r=   r>   r   r(   r   r?   r   r*   r   r   r@   rA   rB   )r   rC   rD   r*   rG   rE   r   r   r   _get_imports_h   s*   

zObjCBaseBackend._get_imports_hc                 C   sB   t t|}|  |D ]
}| d| q|r|   d S d S )Nz
@class {};)r>   rA   rB   r   r   r   rD   Zimport_classr   r   r   _generate_imports_h   s   z#ObjCBaseBackend._generate_imports_hc                 C   s8   t t|}|  |D ]	}| t| q|   d S N)r>   rA   rB   r   r   rJ   r   r   r   _generate_imports_m   s
   z#ObjCBaseBackend._generate_imports_mc                 C   sJ   |  d |    |  d |jrt|s|  tt|j |    d S )Nz!#import <Foundation/Foundation.h>z"#import "DBSerializableProtocol.h")r   r'   r
   r   r   )r   r*   r   r   r   _generate_init_imports_h   s   

z(ObjCBaseBackend._generate_init_imports_hTc           	         s   g   fdd}|j D ]Q}|rt|j\}}|| n7|rRt|j\}}t|s,t|r1|| n!t|sR|jD ]}t|j\}}t|sMt|sMt|rQ|| q8||j	 ||j
 q S )Nc                    sX   t | \} }t| rt| rt | j\} }t| st| s(t| r* |  d S d S d S rL   )r   r   r*   r   r   r(   )r*   rE   resultr   r   _unpack_and_store_data_type   s   zQObjCBaseBackend._get_namespace_route_imports.<locals>._unpack_and_store_data_type)Zroutesr   Zarg_data_typer
   r   r   r?   r*   r	   Zresult_data_typeZerror_data_type)	r   	namespaceZinclude_route_argsZinclude_route_deep_argsrQ   Zrouter*   rE   rG   r   rO   r   _get_namespace_route_imports   s.   
	



z,ObjCBaseBackend._get_namespace_route_importsc                 C   s   |r	|  |d S dS )dReturns an Obj C appropriate name for a constructor based on
        the name of the first argument.r   initDefault)_cstor_name_from_field)r   fieldsr   r   r   _cstor_name_from_fields  s   z'ObjCBaseBackend._cstor_name_from_fieldsc                 C   s   d t|jS )zgReturns an Obj C appropriate name for a constructor based on
        the name of the supplied argument.
initWith{})r   r   name)r   rG   r   r   r   rV   	  s   z&ObjCBaseBackend._cstor_name_from_fieldc                 C   s   |rd t|d d S dS )rT   rY   r   rU   )r   r   )r   Zfields_namesr   r   r   _cstor_name_from_fields_names  s   z-ObjCBaseBackend._cstor_name_from_fields_namesc                 C   s   dd |j D S )z8Returns whether the given struct has any default values.c                 S   s    g | ]}|j st|jr|qS r   )Zhas_defaultr   r*   ).0fr   r   r   
<listcomp>  s    z8ObjCBaseBackend._struct_has_defaults.<locals>.<listcomp>)r?   )r   structr   r   r   _struct_has_defaults  s   z$ObjCBaseBackend._struct_has_defaultsrL   )NNN)Nr4   F)TF)__name__
__module____qualname____doc__r   r    r/   r2   r3   r<   rH   rI   rK   rM   rN   rS   rX   rV   r[   r`   r   r   r   r   r   (   s:    

	#
	
$r   N)
__future__r   r   r   r   
contextlibr   Zstone.irr   r   r	   r
   r   r   r   r   Zstone.backendr   Zstone.backends.obj_c_helpersr   r   r   r   Zstone_warningr   Zbase_file_commentZundocumentedZcomment_prefixr   r   r   r   r   <module>   s    (	
